![](https://img-blog.csdnimg.cn/a8b089f097734ddf96777b9b63a9c983.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法学习计划
文章平均质量分 73
LeetCode算法学习计划(随便练练),本人工作上用不到算法 ,学着玩玩。
小辉_Super
..
展开
-
算法入门C——231. 2 的幂
个人思路:判断一个整数是否是2的n次方,可以通过位运算的方法,2^n可以表现为1左移n位(如0x1=2^0=1<<0,0x2=2^1=1<<1,0x8=2^3=1<<3,…),所以,只要一个整数对应的二进制形式中1的个数为1,则这个数为2的n次方。(虽然负数的二进制形式中最高位为1,但2^n一定比0大,所以不用考虑负整数的情况)原创 2021-11-14 21:40:20 · 1085 阅读 · 4 评论 -
算法入门C——190. 颠倒二进制位
个人思路:定义一个32位无符号变量return_val,在循环中将n的所有二进制位数从最低位到最高位依次赋值到return_val的最高位至最低位。(例如:第一次循环时,将n的最低位与retrun_val进行按位或运算,然将return_val左移1位)原创 2021-11-13 18:02:30 · 1782 阅读 · 0 评论 -
算法入门C——136. 只出现一次的数字
题目要求不使用额外的空间来实现查找功能,加上看到这道题的关键字里带有位操作,所以我第一想到的是按位异或。按位异或有两个特点:(1)一个数按位异或它自己,结果为0;(2)一个数连续按位异或同一个数两次,结果还是最开始的那个数。我能想到最简单的思路:从数组第一个值开始循环,让它和数组每个数(除了自己)进行按位异或,如果出现了结果为0的数组值,就说明存在和它相同的数,即这个数在数组中出现了两次;当出现一个数不能与数组任意另一个数按位异或结果为0(循环到数组尾),则说明这个数在数组只出现一次,返回这个数。原创 2021-11-12 00:23:11 · 777 阅读 · 0 评论 -
算法入门C——191. 位1的个数
不明白题目所说的进阶要求是什么意思,但这道题实现起来相对简单,个人思路:进行循环移位判断每一位数,如果该位为1,cnt加1,直到n为0(高位已经没有1)。原创 2021-11-10 23:15:58 · 578 阅读 · 0 评论 -
算法入门C——206. 反转链表
我们可以定义一个链表指针pre指向当前链表节点的前节点(cur指向当前节点),再定义一个链表指针next指向cur的下一个节点。一开始,pre指向NULL,cur指向头节点,next指向头节点的下一节点;接着进入一个循环(循环条件为cur不为空),每次先让next指向cur->next(将下一个节点暂存);再将cur->next指向pre,这一步正是我们前面说的将链表后向指针的方向翻转;完成链表指针的反转后,我们还要考虑下一次循环,所以要将pre指向cur,以及cur指向next,这样下次循环操作的就是下原创 2021-11-10 22:16:20 · 372 阅读 · 0 评论 -
算法入门C——21. 合并两个有序链表
采用递归,也可称为深度优先搜索,将两个头节点放入递归函数,第一层递归:如果链表l1的值比l2小,则将链表l1的下个节点(l1->next)和l2进行合并,即进行第二层递归,由于合并后的链表头节点为l1,所以在第一层递归后要返回l1;同理,如果第一层递归中l2的值比l1小,就对l2->next和l1进行递归返回l2。第二层递归,在第一层递归中,已经选出了值最小的节点,接下来要选择第二小的,再返回到第一小的节点后面。第三层递归。。。第n层递归,规律和前面两层相同,直到l1或l2为空节点,此时将另一个非空节原创 2021-11-09 23:30:34 · 610 阅读 · 0 评论 -
算法入门C——733. 图像渲染
个人思路:(深度优先搜索)根据题目的提示,我们可以得知像素存放在二维数组image中,它的行数为imageSize,列数为imageColSize[0](第一行的列数),定义一个递归函数dfs(),函数里将image[sr,sc]的像素值与其上下左右四个像素点的像素值对比,如果相同,则将像素值进行修改(改成newColor),同时继续调用递归函数dfs(),直到某像素点上下左右的像素都与原来image[sr,sc]不同,或者到达像素数组的四个边界。原创 2021-11-09 22:28:18 · 874 阅读 · 0 评论 -
算法入门C——617. 合并二叉树
个人思路:使用递归,递归函数中,对两个链表的左右节点都进行相加操作,如果节点1位空,则返回节点2,反之如果节点2位空,则返回节点1,直到两个节点都是空,就放回NULL。原创 2021-11-08 22:26:13 · 440 阅读 · 0 评论 -
算法入门C——3. 无重复字符的最长子串
个人思路:定义两个指针p和q,p指向无重复子串的第一个字符,q用来判断子串是否存在重复字符。一开始两个指针都指向字符串开头,如果*q在以p开始,长度为count的字符数组中无重复字符,则将count加1,同时q向右移动;如果检测到重复的字符,则将p右移1位,同时将q指向p,判断此时count是否大于当前最长字串数max,如果大于,将count赋值给max,同时将count清零,准备测量下一个无重复字串。当p或q指向字符串末尾时,循环结束,如果首先是q到达字符串末尾,说明最后一个字串没有重复,但此时原创 2021-11-06 12:12:14 · 531 阅读 · 0 评论 -
算法入门C——19. 删除链表的倒数第 N 个结点
个人思路:先求出要删除的结点是该链表的第几个结点(index=len + 1 -n),如果是第一个结点(head),就将head往右移动(head=head->next);如果不是头结点,就用一个链表指针tmp指向要删除的结点的上一个结点,最后将tmp的下一个结点的下个结点接在tmp的后面(tmp->next=tmp->next->next)。原创 2021-11-04 21:56:03 · 552 阅读 · 0 评论 -
算法入门C——876. 链表的中间结点
我的思路:先获取链表的长度len,第len / 2 + 1个节点即为中间节点(从1开始)——官方提供了快慢指针法,觉得不错,详细见下文。原创 2021-11-02 22:55:30 · 345 阅读 · 0 评论 -
算法入门C——557. 反转字符串中的单词 III
我的思路:使用双指针,指针start指向单词开头,end指向单词结尾。。一开始,start和end都指向字符串开头,然后end开始向后移动,当检测到end + 1为空格或\0,则调用字符串反转函数,反转函数参数分别是,字符串(单词)开头位置start和单词长度len(在end右移的过程中累加),反转结束后,如果还没有到达字符串尾部,start和end指向下一个单词开头,同时将单词长度累加值len值0,循环结束条件为end指向字符串尾部。原创 2021-11-02 22:16:54 · 447 阅读 · 0 评论 -
算法入门C——344. 反转字符串
将字符串第一个元素和最后一个元素交换,第二个元素与倒数第二个元素交换……一直到字符串最中间位置,可以使用双指针实现,但按照我的习惯,更喜欢用两个for循环,都是一个意思(不过以后还是用指针吧)。原创 2021-11-01 23:47:25 · 960 阅读 · 0 评论 -
算法入门C——167. 两数之和 II - 输入有序数组
这道题我采用了双指针法,虽说叫双指针,但其实没用到指针:定义两个整数,一个指向数组头部,一个指向尾部,如果这两个下标对应的数组值之和等于目标值,则返回这两个下标;如果它们的和小于目标值,指向左下标的整数left向右移;如果它们的和大于目标值,指向右下标的整数right向左移。由于题目要求返回的下标从1开始,所以记得将返回的下标加上1。当然,官方题解中还用到了二分法,具体实现见官方题解(下文)。原创 2021-11-01 23:36:08 · 319 阅读 · 0 评论 -
算法入门C——283. 移动零
使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。原创 2021-10-31 00:59:42 · 339 阅读 · 0 评论 -
算法入门C——189. 旋转数组
这题最简单的解法就是直接将原数组值按照移位后的顺序放入到一个额外的数组,然后再把这个数组的元素全部赋值给原数组,这也是我所用的方法。除此以外,LeetCode还给出了环形替换和数组翻转两种方法。原创 2021-10-29 00:23:31 · 437 阅读 · 0 评论 -
算法入门C——977. 有序数组的平方
这题有很多种解法,我采用的是最直接最低效的数组排序法,即先将原数组的值进行平方,再排序放入另一个要返回的数组。此外,还有进阶方法——双指针,LeetCode给出了两种双指针的方法:原创 2021-10-27 22:14:40 · 734 阅读 · 0 评论 -
算法入门C——35. 搜索插入位置
O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n2)平方阶 < O(n3)(立方阶) < O(2n) (指数阶)原创 2021-10-26 22:28:37 · 457 阅读 · 0 评论 -
算法入门C——278. 第一个错误的版本
算法:二分法查找适用于数据量较大时,但是数据需要先排好顺序。原创 2021-10-26 19:59:10 · 287 阅读 · 0 评论 -
算法入门C——704 二分查找
算法:二分法查找适用于数据量较大时,但是数据需要先排好顺序。原创 2021-10-25 20:33:46 · 515 阅读 · 0 评论