LC
lemonade_C
这个作者很懒,什么都没留下…
展开
-
LC_203. 移除链表元素
提示 利用指针遍历值与给定的值是否相等,若相等则跳过【此处用next来判断方便后续的删除】 若值不等则跳到下一个指针,此处应用else,否则会与相等的语句中指向下一个指针重复,导致跳过了两个值 当链表中只有一个元素时,此时next指针不存在,应另外讨论 在多个元素的对比删除时,应创建一个新的指针,在新指针的基础上进行数组的修改 部分代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * .原创 2020-11-20 11:09:54 · 88 阅读 · 0 评论 -
LC_496. 下一个更大元素 I
题目理解 nums2中的元素要比nums1中的大 nums2中的元素应从与nums1中相同的元素开始遍历 解题思路 利用循环进行数组的遍历和比较 提示 设定一个整型flag判定是否有下一个更大元素 部分代码 /** * Note: The returned array must be malloced, assume caller calls free(). */ int* nextGreaterElement(int* nums1, int nums1Size, int* nums2, .原创 2020-11-17 00:41:57 · 293 阅读 · 0 评论 -
LC_面试题 03.02. 栈的最小值
解题思路 利用数组的方法对元素进行比较,最后输出最小值 问题解决 进行最小值的比较时的判断语句不应用strlen,因为栈top虽然减小,但并没有删除对应的元素;应为obj->top 部分代码 #define SIZE 10000 typedef struct { int data[SIZE]; int base, top; } MinStack; /** initialize your data structure here. */ MinStack* minStackC.原创 2020-11-14 10:55:19 · 90 阅读 · 0 评论 -
LC_1047. 删除字符串中的所有相邻重复项
解题思路 删除的是重复的项,故只需考虑栈顶和即将入栈的元素是否重复 利用数组对栈元素进行拷贝和删除 提示 在栈为空时,舍去比较的过程,直接将元素压入栈内 部分代码 char * removeDuplicates(char * S) { int top = -1; for(int p=0; p<strlen(S); p++) { if(top==-1 || S[top]!=S[p]) //若栈空或不相等,将值压入栈内 { .原创 2020-11-14 09:24:04 · 132 阅读 · 0 评论 -
LC_面试题 02.02. 返回倒数第 k 个节点
解题思路 法一_双指针 定义两个指针指向head 将第一个指针做循环不断指向下一位,直至循环次数为k次 将两个指针同步做循环不断指向下一位,直至第一个指针为空 返回第二个指针所指向的值 法二_单指针(运行时间较短) 定义一个指针temp = head,一个常数count = 0 第一次用head遍历节点数时不断令count++,统计节点个数 第二次用temp遍历节点数,做(count-k+1)次循环 返回temp指向的值 提示 注意循环的次数 代码 法一_双指针 class Solutio.原创 2020-11-05 10:13:41 · 137 阅读 · 0 评论 -
LC_剑指 Offer 09. 用两个栈实现队列
解题思路 利用两个栈实现队列,即一个为主栈stack1,另一个栈stack2作为中介进行转置。 当要在队列尾部添加元素时,即在栈顶添加元素,故只需要在stack1的基础上再添加新元素即可。 当要删除队列头部的元素时,即实际上是删除栈底的元素,而因为栈只有一个出口,故便要利用中介栈stack2来对栈的元素进行倒置,再删除倒置后的栈顶元素,即为所求元素。 提示 stackstack1:利用C++的stack容器定义一个元素为int类型的栈。 将删除的元素值赋给变量时,要记得在stack2栈顶上删除该元素.原创 2020-11-02 15:07:03 · 93 阅读 · 0 评论