![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
文章平均质量分 57
呋喃吖
编程使我快乐
展开
-
150. 逆波兰表达式求值(C++)
文章目录150. 逆波兰表达式求值思路--栈解决150. 逆波兰表达式求值150. 逆波兰表达式求值思路–栈解决class Solution {public://逆波兰表达式运算的思路://碰到数字就入栈;//碰到运算符就出两个数字运算,再把结果入栈 int evalRPN(vector<string>& tokens) { stack<int> st; //入栈数字的栈 //遍历表达式tokens数组原创 2022-03-24 19:49:33 · 2319 阅读 · 2 评论 -
剑指 Offer 31. 栈的压入、弹出序列(C++实现)
剑指 Offer 31. 栈的压入、弹出序列剑指 Offer 31. 栈的压入、弹出序列思路class Solution { //思路是:遍历入栈数组pushed,和弹栈数组popped,用一个新的栈pushSt来做中间层,用来模拟出栈和入栈是否匹配成功;就是pushed数组入栈pushSt,而popped数组向前走遍历就类似出栈pushSt //只要是满足,遍历完弹栈数组poped,那么就表示模拟成功,该序列弹栈poped数组是合法的public: bool val原创 2022-03-23 15:32:34 · 1009 阅读 · 1 评论 -
53. 最大子数组和(C++实现)
文章目录53. 最大子数组和思路1--贪心思路2--动态规划53. 最大子数组和53. 最大子数组和思路1–贪心由于要求最大子数组的和,并且连续的,我们就可以通过贪心一直获取数据,一旦发现,加上数组元素结果和为正数,说明接下来继续选取数据有可能使得结果和是更大的值,一旦发现,加上数组元素是结果和是负数,那么我们就可以去掉之前区间的和的值,重新选取新区见继续贪心下去;class Solution { //贪心: //思路:只要遍历找一直加,一旦加到数字为负数,那么就跳过该序列原创 2022-03-22 11:01:21 · 1948 阅读 · 0 评论 -
2. 两数相加(C++实现)
文章目录2. 两数相加思路--模拟加法运算2. 两数相加2. 两数相加思路–模拟加法运算其实这道题思路很简单:只要我们模拟加法运算即可;遍历两个链表,拿结点相加,要控制进位值;需要注意的是:要处理最后一个结点的进位值;/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNo原创 2022-03-17 20:18:05 · 1916 阅读 · 1 评论 -
209. 长度最小的子数组(C++实现)
209. 长度最小的子数组209. 长度最小的子数组思路–滑动窗口用滑动窗口能够解决本问题:窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。窗口的起始位置如何移动:如果当前窗口的值大于target 了,窗口就要向前移动了。窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,窗口的起始位置设置为数组的起始位置就可以了。class Solution {public: int minSubArrayLen(int target, vector<int>&am原创 2022-03-15 15:22:05 · 891 阅读 · 1 评论 -
977. 有序数组的平方(C++实现)
文章目录977. 有序数组的平方思路--双指针977. 有序数组的平方977. 有序数组的平方思路–双指针由于该数组有负数,且又是升序;所以说:平方后最大值,肯定在数组前面或者数组后面的值;所以我们只要定义两个指针分别指向头和尾;求他们的平方和,再比较,较大的放入新数组的结尾;这样就可以完成平方后的数组也是有序的;class Solution {public: vector<int> sortedSquares(vector<int>& nu原创 2022-03-14 17:15:30 · 1043 阅读 · 0 评论 -
844. 比较含退格的字符串
文章目录844. 比较含退格的字符串思路--双指针844. 比较含退格的字符串844. 比较含退格的字符串思路–双指针准备两个指针 endS, endT 分别指向 S,T 的末位字符,再准备两个变量 countS,countT 来分别存放 S,T 字符串中的 # 数量。从后往前遍历 SS,所遇情况有三,如下所示:1 若当前字符是 #,则 countS 自增 1;2 若当前字符不是 #,且 countS不为 0,则 countS自减 1;3 若当前字符不是 #,且 countS为 0,则代原创 2022-03-14 16:48:51 · 587 阅读 · 0 评论 -
283. 移动零(C++实现)
文章目录题目思路题目283. 移动零思路先把0移除:双指针解决,和leetcode27一样思路再往数组后面填充0class Solution {public: void moveZeroes(vector<int>& nums) { //移动0的思路: /* 先把0移除:双指针解决,和leetcode27一样思路 再往数组后面填充0 */ int原创 2022-03-14 15:15:33 · 1862 阅读 · 0 评论 -
二分查找算法【配合经典力扣题目讲解】(C++实现)
文章目录1 二分查找的基本原理2 二分查找算法的两种写法2.1 左闭右闭的二分查找写法2.2 左闭右开的区间的写法3 四道经典力扣的二分算法的题目3.1 有效的完全平方数3.2 x 的平方根3.3 搜索插入位置3.4 在排序数组中查找元素的第一个和最后一个位置1 二分查找的基本原理二分查找的使用情况:对于已经有序的数据来说,二分查找可以极大的提高查找效率,我们知道查找的本质就是排除,为什么二分查找可以右极高的查找效率呢?本质就是一次查找就可以排除一半无效的数据,这就是它高效的原因之一;从时间复杂度度的原创 2022-03-08 21:42:31 · 1057 阅读 · 1 评论 -
415. 字符串相加【大数相加的问题】(C++实现)
1.题目2.思路其实我们这种字符串的大数相加,不可以直接使用stoi,或者stoll这种函数去相加,因为随时有可能越界的;我们其实需要的是模拟我们计算加法的过程就行;1.定义两个尾指针,指向num1,nums2的最后一个数字,让这两个数字相加,并把相加的结果记录下来;但是我们还需要考虑多一个问题,就是num1和nums2的长度问题,假如哪个比较短的,我们就用0给它不上去就可以;至于如何判断短的,只要有尾指针越界了,另一个没有越界,那么越界的就表示该字符串比较短;2.假如相加产生进位就处理它,只原创 2022-03-02 16:36:37 · 1456 阅读 · 3 评论 -
剑指 Offer 67. 把字符串转换成整数(C++实现)
1.题目2.思路这道题只要把各种情况想清楚就行:去掉字符串前面的空格,只要遍历字符,碰到空格,直接跳过就行,但是注意跳过空格时候,判断是否下标会越界,越界直接返回;判断前面第一个字符是否为+ - 正负号,是的话,也直接跳过,为了使得最终结果是可以表示正负号的效果,我们可以提前设置一个变量来保存正负号的值,+号用1表示,-号用-1表示,最终结果乘于该变量即可;判断是否为数字,假如字符不是数字,那么直接返回即可判断是数字时候就拼接结果,但是,拼接结果时候,要判断越界问题:如何判断呢?我们可以通原创 2022-03-02 15:58:11 · 585 阅读 · 1 评论 -
剑指 Offer 04. 二维数组中的查找(C++实现)
文章目录1. 题目2.思路3.代码演示1. 题目2.思路首先我们要知道查找的本质就是排除,所以当你要查找一个数时候,你可以一个一个的查找,那么就说明你需要一个一个数的排除,你也可以一堆一堆的查找,这样就可以一堆一堆的排除;很明显,在排除的基础上, 谁排除得更多,那么就说明谁查找得更加快;所以:这道题思路一:直接遍历二维数组,一个一个数得查找,肯定能够找到数是否在这个二维数组中;当是这种效率极其低下,也就是说明排除得效率也很低,一个一个得排除;思路二:利用题目条件,提高算法的效率,题目说原创 2022-02-17 19:05:33 · 446 阅读 · 0 评论 -
【Leetcode】二叉树专题(仅需【7道题】就可以带你入门二叉树基本玩法)
文章目录一 剑指 Offer 27. 二叉树的镜像剑指 Offer 27. 二叉树的镜像- - 思路- -(递归)二 剑指 Offer 28. 对称的二叉树剑指 Offer 28. 对称的二叉树- - 思路 - - (递归)三 剑指 Offer 55 - I. 二叉树的深度剑指 Offer 55 - I. 二叉树的深度- - 思路- - (递归)四 剑指 Offer 55 - II. 平衡二叉树剑指 Offer 55 - II. 平衡二叉树- - 思路- -(递归)五 100. 相同的树100. 相同的树原创 2021-11-16 19:28:15 · 1358 阅读 · 9 评论 -
剑指 Offer 59 - I. 滑动窗口的最大值(单调队列思路C++实现)
文章目录题目思路--单调队列题目题目链接:剑指 Offer 59 - I. 滑动窗口的最大值思路–单调队列这道题暴力解法时间复杂度度是 O(n*k);暴力的思路:定义两个指针,一个是窗口的最后一个值的指针 i,另一个是窗口的第一个值得指针 w;用 i 来遍历数组,同时判断窗口范围得最大值;然后 i++,继续判断窗口得最大值;直到 i 遍历完数组即可找出所有窗口得最大值,但是这样时间复杂度度是O(n * k);单调队列思路:搞两个指针w,i: w表示滑动窗口的弟一个指针;i一原创 2021-11-15 00:07:04 · 737 阅读 · 4 评论 -
【leetcode】二叉树的前序 中序 后序 遍历(迭代思路C++实现)
文章目录144. 二叉树的前序遍历前序遍历思路--迭代94. 二叉树的中序遍历前序遍历思路--迭代145. 二叉树的后序遍历后序遍历思路--迭代144. 二叉树的前序遍历题目链接:144. 二叉树的前序遍历前序遍历思路–迭代前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放⼊栈中,然后将右子树加⼊栈,再加⼊左左子树。为什么要先加⼊右子树,再加⼊左子树呢?因为这样出栈的时候才是中左右的顺序。(注意代码中空节点不⼊栈)/** * Definition for a binary原创 2021-11-14 15:15:56 · 1276 阅读 · 1 评论 -
【牛客网】KY11 二叉树遍历(C实现)
文章目录题目思路题目题目链接:KY11 二叉树遍历思路这是一道程序题,需要写出完整的主函数问题:大体思路是:先输入一堆字符串(满足要求的字符串),用这个字符串开始前序创建二叉树,当创建完二叉树时候,就开始中序遍历即可!具体细节:首先我们看到要求是长度不超过100字符;我们可以设定一个字符数组为100;同时要求多组输入字符串:那么我们可以使while(sanf("%s",str)){ }的方式进行;其次要求前序创建二叉树,那么我们需要一个创建二叉树的函数,设计返回值参数为 TreeNo原创 2021-11-14 11:18:27 · 1190 阅读 · 0 评论 -
155. 最小栈(C++实现)
文章目录题目思路题目题目链接:155. 最小栈思路设计两个栈,一个st,一个minSt;入栈:st用来正常入栈,同时给minSt入栈,minSt入st.top 和 minSt.top元素的最最小值;出栈:st出栈,minSt也出栈;因为它们是一一对应的;class MinStack {public: MinStack() { } stack<int> st; //存放正常放入的栈 stack<int> minSt; //存放最小原创 2021-11-04 22:02:06 · 590 阅读 · 3 评论 -
225. 用队列实现栈(C实现)
题目题目链接:225. 用队列实现栈思路用两个队列来模拟实现栈的操作!入栈操作:即给任意一个空的队列入队即完成入栈操作;出栈操作:先把有数据的队列q1的值出队到另一个队列q2,当q1剩余一个数据时候,那么就出队最后一个数据,表示出栈!由于C语言没有提供队列的数据结构,所以需要自己实现一个队列;该队列:队尾入队,队头出队,保持先进先出即可!c代码实现typedef int QDataType;typedef struct QueueNode{ QDataType data;原创 2021-11-04 21:01:15 · 264 阅读 · 3 评论 -
622. 设计循环队列(C实现)
题目题目链接:622. 设计循环队列思路设计循环队列有两种实现方式第一种是使用数组实现;第二种是使用单链表实现;而设计循环队列不管是使用数组实现还是使用单链表实现,都需要给数组预留出一个空间,目的是为了判断队列是否满和是否为空!第一种是使用数组实现:判断满的条件:(tail + 1) %size == front,其中 tail表示队尾,front表示对头,size表示数组大小;判断为空的条件:tail == front;由于是循环队列:所以在插入删除数据的时候,就不可以简单的是原创 2021-11-03 23:03:11 · 251 阅读 · 1 评论 -
232.用栈实现队列(C实现 和 C++实现)
题目题目链接:232.用栈实现队列思路用栈模拟实现队列的意思是:栈是后进先出,而队列是先进后出,要用栈完成先进后出的功能!很明显,一个栈是不可能完成的,因为一个栈只有后进先出,所以我们需要两个栈!1 设一个栈为push,表示为入数据的栈;设一个栈为pop表示出数据的栈!2 要完成入队的功能!只需要把数据往push栈放即可,也就是栈的尾插操作!3 要完成出队的功能!只要把push栈的数据出栈到pop栈中,然后pop栈再出栈即可!4 获取对头元素,也是只要获取pop栈的栈顶元素即可!5原创 2021-11-02 23:09:56 · 743 阅读 · 2 评论 -
20. 有效的括号(C++实现)
题目题目链接:20. 有效的括号思路有效括号的匹配问题和栈的出入问题很相似且匹配;括号匹配问题可以从最内部的括号开始匹配:比如[ ( { } ) ]从 { } 开始匹配,只要是成对,表示匹配成功,继续匹配下一对!可是关键问题是,如何找到最里面的括号对匹配呢?我们可以用栈来帮助我们,当我们遍历字符串 s 时候,碰到左括号就入栈,碰到右括号就拿出栈的左括号来匹配,这样不就可以成对匹配了嘛!并且由于栈是后进先出的结构,也就解决了从字符串内部括号匹配的问题!思路:1.遍历字符串,遇到左括号入原创 2021-11-02 19:19:16 · 481 阅读 · 0 评论 -
面试题 16.16. 部分排序(C++实现)
文章目录题目思路题目题目链接:面试题 16.16. 部分排序思路部分排序思路:要找未排好序的数,其实就是找它的逆序对;如何找逆序对呢?如何确认逆序对的范围呢?逆序对就是相对于原来的排序顺序是相反的,比如原来是从左到右升序,那么你从左到右如果右降序的,那么就是逆序对了确认最右边逆序对的范围?确认左边逆序对的范围?确认最右边的:数组从左到右是增大的,我们用cur遍历数组,找到其最大的一个值max,用nums[cur]和它比较;只要nums[cur] > max 还要大,那么就更新m原创 2021-11-02 09:30:27 · 426 阅读 · 1 评论 -
75. 颜色分类(C++实现)
文章目录题目思路--三指针题目题目链接:75. 颜色分类)思路–三指针其实颜色分类就是对 0 1 2 这三个数字进行排序,但是排序都是有效率之分的,我们希望可以通过一种高效的方法去排序这三个数字,而不希望直接调用排序函数去排序!思考以下:nums = [2,0,2,1,1,0] 要排序改数组,那么结果为[0,0,1,1,2,2]初始条件:分三种情况考虑这个问题:最终结果:代码演示:class Solution {public: //交换函数 void swap(i原创 2021-11-02 09:19:25 · 1013 阅读 · 0 评论 -
138. 复制带随机指针的链表(C实现)
文章目录题目思路--迭代题目题目链接:138. 复制带随机指针的链表思路–迭代思路:此题最难的不是复制链表结点,而是如何处理这个随机指针!假如直接先把原链表的结点都直接复制到新链表中,那么此时就无法链接到随机指针;所以我们必须想法个办法,在复制结点到新链表之前,要把随机指针给连接上;我们知道,对于单链表我们是可以操作链表的任意位置的结点的,也就是说,当我在链表的某一cur结点的时候,我们可以在遍历链表时候记录curPrev结点,也就是得到cur之前的一个结点,我们也可以直接得到cur-&原创 2021-10-30 13:00:26 · 136 阅读 · 1 评论 -
142. 环形链表 II(C实现) 及其思路证明
文章目录题目思路--快慢指针证明从相遇点指针和头指针一起走,一定是环的入口题目题目链接:142. 环形链表 II思路–快慢指针首先先判断是否有环:判断是否有环的思路就是快慢指针的方式;当快慢指针相遇时候一定有环!其次,让慢指针从头结点开始走,而让相遇结点的指针从相遇点走;当慢指针和相遇指针相等表示找到环的入口点;/** * Definition for singly-linked list. * struct ListNode { * int val; * str原创 2021-10-27 21:26:19 · 144 阅读 · 0 评论 -
141. 环形链表(C 实现) 及其证明快指针走两步一定相遇有环问题
文章目录题目思路--快慢指针证明慢指针走一步,快指针走两步相遇一定有环的问题带环中,fast走n步(n>2)能否与slow相遇呢?题目题目链接:141. 环形链表思路–快慢指针带环问题的链表最大的问题是,遍历链表得不到任何有用的信息,因为代换链表没有NULL,所以不知道到哪里结束!所以我们有一种思路就是:快慢指针解决!先让slow 走一步,再让 fast 走两步;同时判断 slow 于 fast 是否相等;如果相等表示有环,如果没相等那么继续遍历下去;如果遍历到fast 或者原创 2021-10-27 20:46:54 · 322 阅读 · 1 评论 -
160. 相交链表(C实现)
文章目录题目思路题目题目链接:160. 相交链表思路先判断是否链表A 和 B 相交判断原则可以分别遍历两个链表到链表结尾,再判断是否两个链表的结尾相同,如果相同就是相交,不相同就是没有相交判断完相交后,再找相交结点:先让长的链表先走差值步,再让短的链表和长的链表一起走;当两个链表的结点相同,就是相交的节点!/** * Definition for singly-linked list. * struct ListNode { * int val; *原创 2021-10-27 19:09:54 · 170 阅读 · 0 评论 -
面试题 02.06. 回文链表(C实现)
题目题目链接:面试题 02.06. 回文链表思路先 找到回文链表的中间结点;再 逆置中间节点往后的链表;然后从回文链表的头开始遍历 和逆置后的链表一个一个比;假如相等就迭代,知道遇到空;证明是回文链表假如不相等那么就一定不是回文链表/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; *///快慢指针找中间结原创 2021-10-27 16:21:42 · 108 阅读 · 0 评论 -
面试题 02.04. 分割链表(C实现)
题目题目链接:面试题 02.04. 分割链表开辟两个头结点:一个存放比x小的数,一个存放比x大的数;当存放完之后,就把大的数链表连到小的链表中;返回小的链表即可!/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* partition(struct ListNode* h原创 2021-10-27 15:11:42 · 98 阅读 · 0 评论 -
21. 合并两个有序链表(三种思路:C实现)
题目题目链接:21. 合并两个有序链表思路1–无哨兵位迭代方式(尾插)合并两个链表和合并两个数组的最简单思路都一样的,都是从两个表中比较元素,谁小就放到新的表中;定义newhead = NULL,tail = NULL; newhead 是新链表的头,tail是新链表的尾部;比较l1->val 和 l2->val ,谁小就谁插入newhead的尾巴tail->next中;注意第一次插入的时候,头插的逻辑要单独处理,因为tail == NULL,无法使用tail->原创 2021-10-24 18:48:47 · 6905 阅读 · 8 评论 -
剑指 Offer 22. 链表中倒数第k个节点(两种思路:C实现)
题目题目链接:剑指 Offer 22. 链表中倒数第k个节点思路1-- 统计链表个数先统计链表的个数 n;然后从前往后遍历链表,第n - k个就是倒数第k个结点;struct ListNode* getKthFromEnd(struct ListNode* head, int k){ //从前往后遍历让cur走n-k步就可以到达倒数第k个结点 struct ListNode* cur = head; int n = 0; //统计链表结点的个数 whil原创 2021-10-24 15:44:24 · 77 阅读 · 0 评论 -
876. 链表的中间结点(两种思路:C实现)
文章目录题目思路1--统计结点的个数思路2--双指针题目题目链接:876. 链表的中间结点思路1–统计结点的个数由于链表的缺陷导致无法通过下标访问结点,所以我么你需要遍历链表访问结点;遍历一遍链表:统计处链表结点的个数count个;再遍历一遍链表:不过此时遍历到count/2 就结束循环;struct ListNode* middleNode(struct ListNode* head){ struct ListNode* cur = head; int count =原创 2021-10-24 14:14:43 · 1880 阅读 · 0 评论 -
206. 反转链表(三种思路:C实现)
题目题目链接:206. 反转链表思路1–直接反转定义prev = NULL,cur = head, curNext = head->next;让cur->next指向prev;然后迭代,让prev 指向cur,cur 指向curNext;继续重复第二步,直到cur等于NULL;退出循环后返回prev结点,就是新链表的头结点;代码:struct ListNode* reverseList(struct ListNode* head){ if(head == N原创 2021-10-23 21:37:56 · 316 阅读 · 0 评论 -
203. 移除链表元素(三种思路:C现)
文章目录题目思路1--无哨兵结点的迭代思路2--有哨兵结点的迭代思路2--递归题目题目链接:203. 移除链表元素思路1–无哨兵结点的迭代要删除链表中的元素:首先要找到该元素的结点;定义一个cur :表示指向要删的元素结点;定义一个prev:表示要删的元素的前面的结点;先让 prev的next指向 cur的next;再释放cur;同时,cur 要继续迭代往前走,找是否还有要删除的元素,此时让cur指向prev的next即可;如果链表为空,直接返回空指针;实现代码:/** * Def原创 2021-10-20 21:21:24 · 278 阅读 · 2 评论 -
26. 删除有序数组中的重复项(三种思路:C实现)
题目文章目录题目思路1--暴力遍历思路2--开辟额外空间思路3--双指针题目链接:26. 删除有序数组中的重复项思路1–暴力遍历思路:由于是有序的,那么就可以遍历数组,找相邻两个数是否相等;如果相等那么就把数组后面的元素往前移动;同时numsSize–;注意:由于遍历数组时候,后面元素往前移动了,所以遍历的元素下标i–;时间复杂度O(n)代码实现:int removeDuplicates(int* nums, int numsSize){ //控制号结束条件即可!!原创 2021-10-17 13:21:33 · 4862 阅读 · 1 评论 -
88. 合并两个有序数组(两种思路:C实现)
文章目录题目思路1--开辟额外空间思路2--双指针从后往前合并题目题目链接:88. 合并两个有序数组思路1–开辟额外空间我们直到要想合并两个数组:最简单的方式就是开辟一个新空间nums;然后,从头开始:nums1和nums2比较,小的放到nums中即可;同时要注意:可以有nums1放完和nums2没放完的情况;还有nums2放完,nums1没放完的情况。最后再把nums的值拷贝回去nums1即可;时间复杂度O(n+m);空间复杂度O(n+m);实现代码:void merge(i原创 2021-10-17 10:00:57 · 951 阅读 · 0 评论 -
27. 移除元素(三种思路: C实现)
题目题目链接:27. 移除元素思路1–暴力遍历直接一个循环遍历nums数组每个元素;再对每个元素判断是否和val相等;相等就把后面的元素往前移动覆盖它,已达到删除val的目的;注意:移除元素后,要对数组元素个数-1,numsSize-1;同时,还要对第一层的for循环遍历的i做i–,因为元素移动覆盖时候位置发生变化时间赋值度O(n2);代码实现:int removeElement(int* nums, int numsSize, int val){ int temp原创 2021-10-17 00:28:47 · 698 阅读 · 0 评论 -
189. 旋转数组(三种思路:C实现)
文章目录题目思路1--暴力旋转--和代码实现思路2--开辟额外空间方式--和代码实现思路3--分别逆置,达到旋转效果题目题目链接:189. 旋转数组思路1–暴力旋转–和代码实现暴力旋转:要理解计算机的”旋转“和我们说的旋转是不一样的,我们要用计算机思维去思考旋转,是怎么旋转。定义一个变量 temp ,保存数组最后一个数字nums[n -1];把数组0 - n-2的下标位置数字都往后移动一个格子,直到空出 0 位置的格子;把temp赋值到nums[0],即完成一次旋转;如果要完成多次原创 2021-10-13 23:12:46 · 554 阅读 · 1 评论 -
8. 字符串转换整数 (atoi)(C实现)
题目题目链接:8. 字符串转换整数 (atoi)思路思路:这道题主要是要注意以下几种情况:开头字符串都是空格,所以要控制空格:如 ** 123**;输出:123;有正负号±;所以要控制正负号,如:+123;输出:123;数字后面有其他字符,要控制:如:123abc123; 输出:123;4.可能数字超出int的最大最小范围,也要控制。代码实现int myAtoi(char * s){ //如果一开始就碰到空格跳过 while(*s == '原创 2021-10-13 19:48:27 · 208 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数(C实现)
题目题目链接:剑指 Offer 56 - I. 数组中数字出现的次数实现思路:首先我们知道这道题要找两个不同的数字,除了这两个不同的数字,其他数字都是两两配对的。我们做过一道题:消失的数字,在这道题中,我们可以很轻松的通过异或找到其中一个不在的数字;我们使用的方式是 相同的数字异或会得到零的方式找到的,而0异或任何数,都不会变;这道题难点在于有两个不相同的数;比如要找一个数组nums[1,1,2,3,3]找到其中的只有一个不同的数字2,我们可以通过 0 ^ 1 ^ 1 ^ 3 ^ 3 ^ 2原创 2021-10-12 17:08:29 · 167 阅读 · 2 评论