首页 > 编程语言 >一个算法笨蛋的11月leetCode刷题日记

一个算法笨蛋的11月leetCode刷题日记

时间:2023-12-01 11:36:30浏览次数:41  
标签:11 结点 遍历 链表 2021 思路 leetCode 刷题

时间

情况

2021年10月29日

时隔一年,第三次重做反转链表,又没做出来,太废了。

2021年11月1日

时隔两天,第四次重做反转链表,轻松写出

【21】合并两个有序链表(思路:想象两个有序链表,需要新建两个next指向头节点的空node,一个用于最后返回.next,一个用于接收最小的node)

【206】反转链表(思路:想象一个单链表,需要创建一个与头结点相识的cur结点进行遍历,创建一个用于保存新的链表的prev空结点,以及一个临时保存cur的中间结点)

【83】删除排序链表中的重复元素(思路:想象一个排序链表,定义一个与head引用相同的cur结点,cur与cur.next比较,相同则cur.next = cur.next.next,否则继续遍历)

【141】环形链表(思路:使用快慢指针,不成环就必然会出现快指针的next是null,退出循环,返回false )

2021年11月2日

【161】相交链表(思路:由于不能改变链表结构,所以注意遍历到末尾使用赋值法,别通过pA.next = headB的方法进行交换链表遍历,会导致死循环。不相交的情况下,pA,pB都为空时退出循环)

【203】移除链表元素(思路:非常简单,思路也非常清晰,定义一个prev结点,是一个next指向head的空结点,再定义一个空节点cur,prev赋给cur,遍历cur,相同则cur.next = cur.next.next,否则继续遍历)

【234】回文链表(思路,使用快慢指针找出中间结点temp,然后利用栈实现temp后的结点从尾到头遍历,并与头结点遍历的值比较,一旦出现不同就为false,否则正常返回true)写了好久…

2021年11月3日

【237】删除链表中的结点(思路:由于只提供了一个要删除的结点,所以可以通过将当前结点的下一个结点的值赋给单前结点,然后删除单前结点的下一结点即可,两行代码可搞定)

【705】设计哈希集合(思路:利用LinkedList进行操作,构成hashset结构,自定义hash算法。 不熟练,看答案做的

【706】设计哈希映射(思路:跟设计哈希集合一样,不过之前数组中存的是int类型,现在是存的一个新建的带有key和value两个字段的实体类。。不熟练,看答案做的

【876】链表的中间结点(思路:做过最简单的链表题,包括写代码及测试的时间用时两分钟,使用快慢指针即可,太简单了)

【1290】二进制链表转整数(思路:由于二进制是从尾到头进行指数运算再分别相加的,所以先反转链表,再使用Math.pow()方法进行指数运算)

【2】两数相加(思路:时隔半年,满打满算已经是第四次做了,可是刚打开题目还是一脸懵,一丁点思路都没有,太废了。注意别陷入误区,直接相加就行,不用反转链表,注意在循环外定义变量保存进位。还有就是循环条件是l1 != null 或 l2 !=null)

【19】删除链表的倒数第n个结点(思路:使用快慢指针法。创建空指针,其next指向head,并创建快慢指针,分别赋值为head。快指针先走,快指针每走一步,记录步数,步数大于n时,慢指针开始走,快指针的next为空时,慢指针就在倒数第n+1个结点)

【24】两两交换链表中的结点(思路:递归恐怖如斯,看完题目后苦思冥想想不出来,老是感觉无法返回头结点,看了官方答案,使用递归居然5行代码解决。只能说我对递归还是太陌生了,不会写递归,太废了

2021年11月4日

【61】旋转链表(思路:虽然最后自己磕磕碰碰做出来了,但是花费了40多分钟,由于要考虑太多边界条件了,而且感觉一点都不简洁,非常不优雅,太废了。思路就是先找出倒数第k-1个结点,然后把第k个结点摘除出来,将摘除出来的链表的尾结点的next设置为head,并且将k-1结点的next设置为null即可。其实就是将[1,2,3,4,5]链表中的[4,5]摘除,放到[1,2,3]的前面,变成[4,5]->[1,2,3])

【19】删除链表中的重复元素‖(思路:太废了,又是做不出来,看了答案,简直牛皮,直接通过一个head结点推导全部过程,通过递归及双重while循环判断,完美实现,拜服。)

【86】分隔链表(思路:思路非常简单,将小于 x 的结点放到同一个链表,将大于等于x的结点放到另一个链表,最后两个链表合起来就ok了。虽然做出来了,但是没注意审题,耗时较长,唉,太废了

2021年11月5日

 

【19】反转链表‖ (思路:我一开始的思路就是先定位到要反转的前置和后置结点,并截取出来,然后对截取出来的链表进行反转,最后在拼接;奈何代码表达能力不行,最后有些边缘测试示例无法通过,遂求助于题解。太废了

2021年11月6日

周末,休息

2021年11月7日

周末,休息

2021年11月8日

上午仔细复习了一遍上周所写的所有算法题,发现基本100%都可以见题脑海中就浮现思路,90%可以在脑海中编码出来详情,看来上周坚持上班路上在脑海中写一遍前一天的算法,下班路上脑海中写一遍当天的算法,是非常有用的。

【109】有序链表转换二叉搜索树(思路:就是一个循环对链表找中间结点,然后分割的一个过程,最后无法再分时,组装起来的就是一个树了,重点就是如何通过递归进行循环找中间结点,并创建对应树结点,并按规则赋给树的左右子结点。找中间结点的算法也有点不同,需要传入left和right两个结点,而不是平常的传入head结点)

【138】复制带随机指针的链表(思路:有个嘚的思路,看了题目以后,一分钟内完全一丝一毫思路都没有,就直接看题解了,最后发现第一个题解使用递归解决,我脑子不够用,无法理解。第二个题解不使用递归,我才慢慢看懂了思路。思路就是先不管随机指针,复制每个节点并拼接在被复制节点的后面;然后再从头遍历,将拥有随机指针的cur节点的next节点,指向cur节点的随机指针的next节点;最后就是分隔成两个链表,这一步较难,建议看题解)

2021年11月9日

【142】环形链表‖(思路:太简单了,虽然我的答案运行速度和所使用内存空间大小不太理想,但是实在是太快了,一步到位。我的思路就是通过hashMap,没遍历一个就存入map中,只要cur不为空,就一直遍历,如果遇到map中已存在的key,就直接返回cur即可,太简单了)

【143】重排链表(思路:使用快慢指针找到中间结点,分割链表,将后一个链表反转。将前一个链表与反转后的链表进行依次连接即可。啊啊啊,好气啊,我的思路与题解完全一样,就是在最后连接链表的时候出了问题,以及没有将前一个链表的尾结点的next置空。好气啊,就差一丝丝。写了几十行代码,基本都和题解一样,最后却没做出来。气啊!!还有第二种方法:将链表存进线性表中,可以通过下标访问,只需要一个从头i++获取,一个从尾j- -获取并连接就行,更简单。)

2021年11月10日

【147】对链表进行插入排序(思路:我的思路是一点毛病没有啊,通过双重遍历,先遍历获取原链表的结点cur,再将该结点通过对新链表进行第二重遍历查找插入的地方。唯一需要注意的两点就是,其一不要直接取cur结点,而是new一个结点将cur的值赋给新结点,否则会带上cur后的所有结点。其二第二重遍历中,找到插入的地方后记得break跳出第二重循环。)

【148】排序链表(思路:由于题目限定了时间复杂度为nlogn,所以排序算法就只能选择归并排序、堆排序、快速排序了。由于归并排序是最适合链表的,所以使用归并排序。思路是先找使用快慢指针找到链表的中间结点,然后分割成两个链表,再通过递归对左右两个链表进行继续分割。通过分割后返回的left结点和right结点进行合并两个有序链表操作)

2021年11月11日

【328】奇偶链表(思路:老实说,我觉得这题不配medium难度,实在是太简单了,用时三分钟,一次过,离谱,思路贼简单,分别定义两个新链表的链表头odd、even,以及用于最后返回和拼接的赋值结点odd2和even2。对head进行遍历,通过定义的num进行计数以及通过对num取余判断是奇数还是偶数,分别添加到odd和even中,最后拼接即可,太简单了)

【382】链表随机结点(思路:没做出来,虽然思路有,也很简单可以实现,但是超过了题目的要求,一次遍历,而我的思路需要进行两次遍历。看了题解,鬼斧神工,简直让我大开眼界,这算法让我想一辈子可能都想不到,反直觉。题解的代码非常简单,主要是思路,目的是确保每一个结点被选中的概率相同,也就是m个结点的链表,每个结点有1/m的概率被选中。但是按照我一开始的思路,就先要遍历链表获取链表长度m,然后通过random.nextInt(m)获取一个随机数n,然后再遍历链表获取第n个结点的val,遍历了两遍链表。题解的思路我解释不了,自己看题解去吧!!!)

2021年11月12日

【172】交换链表中的结点(思路:怎么说呢,有两种方法,第一种是交换两个结点,第二种是交换两个结点的值;奈何我脑子瓦特了,脑子里就想着第一种交换结点。而实际上,第二种比第一种简单的多,不需要考虑那么多特殊情况,最后特殊情况处理不好,导致部分测试用例不通过,就GG了,最后使用第二种轻松解决。)

【725】分隔链表(思路:没做出来,难受,明明脑子里是有思路的,但是就是无法通过代码表达这复杂的逻辑,归根到底应该还是我的思路不够全面,所以没做出来。做法就是先遍历一遍获取链表总长度,再通过取余和相除分别获取多余的结点数,和分割后每段链表的最小长度。再通过双重for循环进行分割)

【430】扁平化多级双向链表(思路:就是一个非常直接的思路,不就是有分叉就先连接分叉,分叉再连接主干,最后成为一条没有分叉的链表。是我想复杂了,又没做出来,不过能够看懂题解,理解题解,也还行,慢慢来,思路会越来越清晰的)

2021年11月13日

周末,休息

2021年11月14日

周末,休息

2021年11月15日

【817】链表组件(思路:我们只需要遍历一遍链表即可,将数组中的值放入hashSet中,通过contains()方法判断是否为一个组件的尾结点,也就是当前结点的值在set中,而下一节点的值不在set中,那么当前结点的值就是一个尾结点,代表一个组件。懂得思路后,代码写起来非常简单

【707】设计链表(思路:每次遇到什么设计链表啊,设计哈希映射啊,设计哈希集合啊,设计栈啊什么的,我就特别烦,唉,没做出来。我凭感觉写的几十行代码运行后可以通过第一个测试用例,但是一提交就报空指针,也不知道是哪里出问题啊。最后看题解,感觉自己写的跟题解写的就不是一个东西,无爱了,弃了弃了。太废了

【1019】链表中的下一个更大结点(思路:非常简单吧,第一步遍历链表将结点的值存入一个list中,记录list的大小。第二步list转数组,通过双重for循换,进行简单大小判断,即可返回最终数组,太简单了

【1171】从链表中删去总和值为零的连续节点(思路:很遗憾,我没做出来,太废了。我的逻辑思维没有想通,如何使用代码删除相加为零的所有结点,卡在这里导致一直无法写下去,最后看题解,才懵懵懂懂了解了,通过双重循环中的外循环加一个if判断,如果遍历结点为空,则前置结点继续遍历,否则判断为找到了相加为零的结点,无需后移。好吧,滚去看代码吧,我这无力的表达能力)

【1367】二叉树中的列表(思路:菜逼石锤了,太多条件判断了,没做出来,是我菜了,只要涉及到递归,我就没了,难受)

2021年11月16日

【1669】合并两个链表(思路:较为简单,通过遍历时计数,保留第a-1个结点和b+1个结点用于与list2连接,重点就是要考虑到list1的头结点也有可能会被删除掉,所以定义的新结点都得是前置虚拟结点)

【215】数组中的第k个最大的数(思路:使用快排,提示超出时间限制,最后我无赖的使用了Java的Arrays.sort()方法直接排序,两行搞定。这种做法不太推荐,看题解是使用什么大顶堆,小顶堆,快速选择排序,没看懂,弃了)

2021年11月17日

【94】二叉树的中序遍历(思路:不能再基础的东西,一年以后如果你还是跟反转链表一样忘记了,你就是废物石锤)

【144】二叉树的前序遍历(思路:不能再基础的东西,一年以后如果你还是跟反转链表一样忘记了,你就是废物石锤)

【145】二叉树的后序遍历(思路:不能再基础的东西,一年以后如果你还是跟反转链表一样忘记了,你就是废物石锤)

【100】相同的树(思路:废了废了,大概是刚刚做了前、中、后序遍历,做熟了,脑子里就光想着先遍历存值,再比较的方法,还做错了,看题解好简便啊,连树的简单题都没做出来,太废了)

【101】对称二叉树(思路:我看题目的第一眼,就是感觉跟【100】相同的树一样但是我错了,大错特错,大佬思路非同凡响,我的思路不堪入目。通过同时一个从左边遍历,一个从右边遍历,只要两边遍历的结点的值一直系统,就是对称镜像的)

【104】二叉树的最大深度(思路:做这几题树相关的算法题下来,只有一个感想,我好菜,题解好强,思路就是使用深度优先算法,递归的退出条件是结点为空时,返回0, 否则左右分别递归,取左右递归返回的两个值中的最大值+1,然后返回)

2021年11月18日

【108】将有序数组转换为二叉搜索树(思路:迄今为止,除了前中后序遍历,没有一题树相关的算法题做出来,都得看题解,我太难了。思路就是不断找数组中间值为root,递归的退出条件是left < right,好烦,做不出来)

2021年11月19日

【110】平衡二叉树(思路:心态崩了啊,好不容易感觉这次可以实现树相关算法的大突破,实现不看题解做出一题树相关算法,超级自信地提交,没想到提交一直失败,唉。)

【111】二叉树的最小深度(思路:我直接按照求最大深度的算法来求,不过把Math.max变成了Math.mn,果然不行,所以,,,还是得看题解。啊啊啊二叉树,我我跟你不共戴天)

【112】路径总和(思路:又没做出来,是我想多了,唉,一步之遥,但是没做出来就是没做出来,迄今为止树算法尚未做对一题,呵,愚蠢的地球人)

【226】翻转二叉树(思路:呵,不是我吹,没人比我愚蠢,又没做出来,递归为什么这么反人类啊,不,不是反人类,是反我。现在我已经无法想象我未来熟练使用递归的场景了,感觉那是梦,那是遥不可及的梦)

【235】二叉搜索树的最近公共祖先(思路:继续期待树的大突破,结果如何,你懂的。重点就是二叉搜索树的性质,左子树都比父节点的值小,右子树都比父节点的值大。所以只要p、q两个结点不是同时大于父节点或同时小于父节点,那这个结点就是最近公共祖先)

2021年11月20日

周末,休息

2021年11月21日

周末,休息

2021年11月22日

【257】二叉树的所有路径(思路:新的一周,开局雷击。我现在非常怀疑自己跟递归的思维相克,我完全无法利用递归写新的算法题,只有看过题解的题目,我才能看懂递归,但是完全无法自己写递归,好迷茫啊,一个礼拜了,还在被递归折磨,我的身体和脑子都在逼我放弃了,好累)

【404】左叶子之和(思路:继续不会做,废物一条,太烦了,看哪一题都感觉没有突破点,递归对我来说太反直觉了)

2021年11月23日

【501】二叉搜索树中的众数(思路:这题勉强能通过部分测试用例,但是部分用例超时了,所以总体来说,还是没做出来啊。放平心态,慢慢来,慢慢来。逐渐忙起来了呀)。

2021年11月24日

 

【530】二叉搜索树的最小绝对差(思路:突破了,这题没看题解做出来了,非常nice,这是树相关算法的大突破,虽然这题非常简单,虽然这题的解题思路没有那么反直觉,,虽然非常容易想到我这种暴力破解的方法,但是毕竟突破了,嘿嘿,大突破啊)。

2021年11月25日

忙,没做

2021年11月26日

【543】二叉树的直径(思路:我脑子里的思路是正确的,奈何无法用代码表达出来,递归还是太反直觉了。只需要做过【104】二叉树的最大深度,脑子里应该都可以有正确的思路,就是通过获取每个结点的左右子树的最大深度相加,然后与当前最大直径比较,更大就替换。但是代码功底太差了,无法用递归表现出来)。

2021年11月27日

周末,休息

2021年11月28日

周末,休息

2021年11月29日

【563】二叉树的坡度(思路:通过计算每个结点的子树的总值,然后返回左子树与右子树相减的绝对值,重点就是要在获取左右子树的总值的同时,记录坡度相加的值。代码很简单,呵,可是我没做出来)。

【572】另一棵树的子树(思路:与前面的题挺相似的,都是找相同的树,通过找相同的树的方法,可以非常快完成)。

 

 

 

 

 

 

 

https://blog.51cto.com/u_14486541/5371122

标签:11,结点,遍历,链表,2021,思路,leetCode,刷题
From: https://www.cnblogs.com/gongxianjin/p/17869324.html

相关文章

  • FX110网:为什么日内交易如此困难?克服日内交易的5大难点
    你理解的日内交易是什么呢?早上开仓,晚上就能赚个盆满钵满?遗憾的是,日内交易并非如此简单,而是十分具有挑战性的交易方式,短线投资会有很多陷阱,一不小心,连连亏损也是有可能的。日内交易主要是指持仓时间短,不留过夜持仓的交易方式。为什么日内交易如此困难?与长线交易相比,日内交易往往表......
  • 【LeetCode】22. 括号生成
    题目数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]提示:1<=n<=8思路:利用深度优先遍历,记录左括号可用个......
  • .NET周刊【11月第4期 2023-11-26】
    国内文章万字长文:从C#入门学会RabbitMQ消息队列编程https://www.cnblogs.com/whuanle/p/17837034.html如题,详细的介绍RabbitMQ以及C#的使用。CPFC#跨平台UI框架开源了https://www.cnblogs.com/dskin/p/17849896.html本文介绍了C#的跨平台UI框架CPF,它支持.NETStandard2.......
  • 【牛客刷题】
    scanf读入16进制数写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。 数据范围:保证结果在1≤n≤2^31−1 我的解法:voidHexToDec(void){uint32_tresult=0;scanf("%x",&result);printf("%d",result);}scanf("%x",&n);就可以接收16进制数据。......
  • 【2023-11-30】瞬间长大
    20:00幸福的秘诀是降低预期值。如果你对人生有一些不合理的需求,你就会像笼子边扑腾的鸟,飞不出笼子的。                                                 ——芒格看着......
  • win11照片无法切换到下一张
    1–更改文件夹搜索选项1.只需按住键盘上的Windows+E组合键即可打开文件资源管理器。在文件资源管理器的顶部,单击三点菜单并选择选项。2.这将为您打开“文件夹选项”窗口。单击“搜索”选项卡将其选中。3.在这里,选中与在文件夹中搜索系统文件时不使用索引相关的框(搜索......
  • 刷题建议
    刷题这件事情本身也是需要「方法」的。我们针对算法面试准备的算法题,不是智力题,我们觉得刷题有困难,有很大一部分是心理上的因素。其实这一类算法问题非常像我们初高中的数学问题,知识点很多,都有相对固定的思考方向和常考的知识点,答案和思路也是相对固定的。刷题这件事情我觉得一......
  • 11月30日加 卓有成效的程序员读书笔记三
    今天上课完成了王老师的考试系统的数据流程图的绘画讲道理看着很麻人不过还是让我磕出来了 “古代哲人”一章里的提到一些东东,可能是我们大家都知道的一些道理或法则。但“知道法则”是一会事儿,“理解法则”又是另一会事儿。里面的“事物的本质性质和附属性质”就是哲学中......
  • 2023年11月随笔之双11成为有qian人
    1. 回头看日更坚持了334天。学信息系统项目管理师第4版系列全部更新完成读《图数据库实战》缓缓更......读《读程序员的制胜技》开更并更新完成读《像火箭科学家一样思考:将不可能变为可能》开更持续更新中11月码字68883字,日均码字数2296字,累计码字645971字,累积......
  • CF1198题解
    CF1198CodeforcesRound576(Div.1)CF1198AlinkCF1198A题意有一种数字化一段录音的常用方式,是记录每一个时刻的强度值。这些非负的强度值就可以代表一段音频对于一段音频,若有\(K\)个不同的强度值,那么每一位我们都需要\(k=\lceil\log_2K\rceil\)\(\text{bit}\)来存......