C语言leetcode刷题笔记3

C语言leetcode刷题笔记3

  • 第8题:876.链表的中间结点
    • 遍历数节点个数
    • 快慢指针
  • 第9题:874.比较含退格的字符串
  • 第10题:155.最小栈
    • 法1:getMin内部实现查找
    • 法2:getmin直接返回值
    • 补充:栈的使用
      • 例子
      • 优化:传递指针
      • 优化:初始化、动态分配、释放

第8题:876.链表的中间结点

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例 1:

输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。

遍历数节点个数

struct ListNode* middleNode(struct ListNode* head) {int count=0;struct ListNode*t=head;while(t){t=t->next;count++;}// count++;count=count/2;t=head;while(count){t=t->next;count--;}return t;}

快慢指针

struct ListNode* middleNode(struct ListNode* head) {struct ListNode* show=head;struct ListNode* fast=head;while(fast->next!=NULL){fast=fast->next->next;show=show->next;if(fast==NULL)break;}return show;
}

第9题:874.比较含退格的字符串

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

示例 1:

输入:s = “ab#c”, t = “ad#c”
输出:true
解释:s 和 t 都会变成 “ac”。

void simplify(char* s) {int sl = strlen(s);int p = 0;for (int i = 0; i < sl; i++) {if (s[i] == '#') {if (p > 0)p--;}elses[p++] = s[i];}s[p] = '\0';return;
}
bool backspaceCompare(char* s, char* t) {
simplify(s);
simplify(t);return strcmp(s, t) == 0;
}

第10题:155.最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。

示例 1:

输入:
[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]
[[],[-2],[0],[-3],[],[],[],[]]

输出:
[null,null,null,null,-3,null,0,-2]

解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

法1:getMin内部实现查找

typedef struct {int value[10001];int stacktop;} MinStack;MinStack* minStackCreate() {MinStack* obj = malloc(sizeof(MinStack));obj->stacktop = 0;return obj;
}void minStackPush(MinStack* obj, int val) {obj->value[obj->stacktop] = val;(obj->stacktop)++;
}void minStackPop(MinStack* obj) {if (obj->stacktop){//obj[stacktop-1].value =INT_MAX;(obj->stacktop)--;}}int minStackTop(MinStack* obj) {if (obj->stacktop)return obj->value[(obj->stacktop)-1];elsereturn 0;
}int minStackGetMin(MinStack* obj) {if (obj->stacktop) {if(obj->stacktop==1)return obj->value[0];int Mi = obj->value[0];for (int i = 1; i < obj->stacktop; i++) {if (obj->value[i] < Mi)Mi = obj->value[i];}return Mi;}elsereturn 0;
}void minStackFree(MinStack* obj) { free(obj); }/*** Your MinStack struct will be instantiated and called as such:* MinStack* obj = minStackCreate();* minStackPush(obj, val);* minStackPop(obj);* int param_3 = minStackTop(obj);* int param_4 = minStackGetMin(obj);* minStackFree(obj);
*/

在这里插入图片描述

法2:getmin直接返回值

typedef struct {int *data;//data[100]int *mins;int size;} MinStack;MinStack* minStackCreate() {MinStack* obj=(MinStack*)malloc(sizeof(MinStack));obj->data=NULL;obj->mins=NULL;obj->size=0;return obj;}void minStackPush(MinStack* obj, int val) {obj->data=(int*)realloc(obj->data,sizeof(int)*(obj->size+1));obj->mins=(int*)realloc(obj->mins,sizeof(int)*(obj->size+1));//obj->data[obj->size]=val;if(obj->size==0||obj->mins[obj->size-1]>val){obj->mins[obj->size]=val;}else{obj->mins[obj->size]=obj->mins[obj->size-1];}obj->size++;}void minStackPop(MinStack* obj) {obj->size--;}int minStackTop(MinStack* obj) {return obj->data[obj->size-1];}int minStackGetMin(MinStack* obj) {return obj->mins[obj->size-1];// return 0;}void minStackFree(MinStack* obj) {free(obj->data);free(obj->mins);obj->size=0;free(obj);}

在这里插入图片描述

补充:栈的使用

例子


#include <string.h>#include <stdio.h>typedef struct{int data[100];int size;}Stack1;
void Push(Stack1 t,int val)//只能修改传递过来的值
{t.data[t.size]=val;t.size++;
}
void Pop(Stack1 t)
{t.size--;
}
void StackPrint(Stack1 t)
{int len=t.size;int i;for(i=0;i<len;i++){printf("t.data[%d]=%d\n",i,t.data[i]);}
}
int main()
{Stack1 t;t.size=0;memset(t.data,100,0);Push(t,10);//无法修改Push(t,20);StackPrint(t);return 0;
}
//输出空
//未使用指针,无法修改值

优化:传递指针

#include <string.h>#include <stdio.h>typedef struct{int data[100];int size;}Stack1;
void Push(Stack1* t,int val)
{t->data[t->size]=val;t->size++;
}
void Pop(Stack1* t)
{t->size--;
}
void StackPrint(Stack1 t)
{int len=t.size;int i;for(i=0;i<len;i++){printf("t.data[%d]=%d\n",i,t.data[i]);}
}
int main()
{Stack1 t;t.size=0;memset(t.data,100,0);Push(&t,10);Push(&t,20);Push(&t,30);Pop(&t);StackPrint(t);return 0;
}
/*
t.data[0]=10
t.data[1]=20*/

优化:初始化、动态分配、释放

#include <string.h>#include <stdio.h>
#include <malloc.h>typedef struct{int *data;//data[100]int size;}Stack1;
Stack1* create()
{Stack1* obj=(Stack1*)malloc(sizeof(Stack1));obj->data=NULL;obj->size=0;return obj;}
void Push(Stack1* t,int val)
{t->data=(int*)realloc(t->data,sizeof(int)*(t->size+1));t->data[t->size]=val;t->size++;
}
void Pop(Stack1* t)
{t->size--;
}
void freestack1(Stack1* t)
{free(t->data);t->size=0;free(t);//t=NULL;//t->size--;
}
void StackPrint(Stack1 t)
{int len=t.size;int i;for(i=0;i<len;i++){printf("t.data[%d]=%d\n",i,t.data[i]);}
}
int main()
{
//    Stack1 t;
//    t.size=0;
//    memset(t.data,100,0);Stack1 * t=create();Push(t,10);//Push(t,20);Push(t,30);Pop(t);StackPrint(*t);freestack1(t);return 0;
}
/*
t.data[0]=10
t.data[1]=20*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/697371.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode2079. 给植物浇水

Every day a Leetcode 题目来源&#xff1a;2079. 给植物浇水 解法1&#xff1a;模拟 sum 记录总步数&#xff0c;初始化为 0。water 表示当前水量&#xff0c;初始化为 capacity。 遍历 plants 数组&#xff0c;设下标为 i 的植物需要的水量 plant plants[i]。 如果 wat…

2023 PWNHUB 3月赛-【tototo】

文章目录 volatile泄露_environ打栈漏洞利用malloc和calloc思路&#xff08;打_environ&#xff09;代码 volatile int volatile vInt; 当要求使用 volatile 声明的变量值的时候&#xff0c;系统总是重新从它所在的内存读取数据&#xff0c;即使它前面的指令刚刚从该处读取过数…

孙宇晨对话大公网:香港Web3政策友好环境示范意义重大

日前,全球知名华文媒体大公网发布《湾区web3大有可为》重磅系列报道。报道通过对中国香港与大湾区其他城市Web3政策、行业创新和生态建设等方面的梳理,以及对行业领袖和重要行业机构的走访,全面展现了在大湾区一体化发展的背景下,Web3等数字经济模式在该地区的长远发展潜力。 …

GitHub和huggingface镜像网站

GitHub镜像网站 gitclone 如果网络原因打不开GitHub的话&#xff0c;可以用这个网站进行克隆项目&#xff0c;将克隆代码修改一下 git clone https://github.com/comfyanonymous/ComfyUI.git 修改 git clone https://gitclone.com/github.com/comfyanonymous/ComfyUI.git 这个…

[附源码]剑灵三系可乐6.1_Win服务端_联网+单机搭建

本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是完整可运行的&#xff0c;踩过的坑都给你们填上了。 如果你是小白也没…

depcheck检查项目中未被使用的依赖

depcheck是一个用于分析项目中依赖项的工具&#xff0c;可以查看&#xff1a;每个依赖项是如何使用的&#xff0c;哪些依赖项是无用的&#xff0c;以及哪些依赖项在package.json 1、安装 npm install -g depcheck # 必须全局安装2、可配置文件.depcheckrc&#xff08;不配置 直…

Django图书馆综合项目-学习

图书馆项目 一 前期准备 安装好所需的环境 我这边用的IDE是VScode 操作系统是MACOS 二 先创建一个虚拟环境 python3 -m venv myenvbook source myenvbook/bin/activate 三 安装 Django pip3 install django4.2 四 创建 Django 项目 django-admin startproject bookp…

简单实现---基于STL的演讲比赛流程管理系统(C++实现)

前言 事先声明&#xff1a;本文章中编写的代码仅用于学习算法思想和编写基础形式使用&#xff0c;并未进行太多的代码优化&#xff0c;因此&#xff0c;若需要对代码进行优化以及异常处理的小伙伴们&#xff0c;可自行添加相关操作&#xff0c;谢谢&#xff01; 一、题…

解决kali linux ssh连接失败

kali linux 默认ssh是禁止root登录的 为了通过 SSH 进入你的 Kali Linux 系统&#xff0c;你可以有两个不同的选择。第一个选择是创建一个新的非特权用户然后使用它的身份来登录。第二个选择&#xff0c;你可以以 root 用户访问 SSH 。为了实现这件事&#xff0c;需要在SSH 配…

[嵌入式系统-78]:RT-Thread:线程管理的基本原理与应用

目录 一、RTT线程的特点 二、RTT线程机制 2.1 线程的属性与线程控制块详解 2.2 线程的调度 2.3 线程的切换 2.5 系统线程 三、线程的调度机制 3.1 线程创建与删除 1、线程控制块 2、线程栈 3、入口函数 4、线程的创建方式 &#xff08;1&#xff09;静态线程初始化函…

visual studio2022 JNI极简开发流程

文章目录 1 创建java类2 生成JNI头文件3 使用visual studio2022创建DLL项目3.1 选择模板中&#xff08;Windows桌面向导&#xff09;3.2 为项目命名3.3 选择应用程序类型为动态链接库3.4 项目概览 4 导入需要的头文件4.1 导入需要的头文件4.2 修改头文件 5 编写C实现6 生成dll文…

O2OA翱途开发平台前端API和后端API的访问以及使用

O2OA是一个高度可定制化的企业级开发平台&#xff0c;它的API&#xff08;应用程序接口&#xff09;分为前端和后端&#xff0c;各自有不同的用途&#xff0c;平台为用户开放了全部的后端API供开发者使用&#xff0c;开发者可以根据各类API组织出符合实际业务需求的新服务或者新…