LeetCode题
文章平均质量分 80
tao滔不绝
22级大学生,用写博客的方式记录学习,欢迎大家阅读
展开
-
LeetCode题:174. 地下城游戏
这题我们用到动态规划的思想,分析题目,我们要从左上角走到右下角,求我们最小初始健康点数是多少。按往常经验,我们喜欢以某个点为终点,填这个位置在dp表中的值是多少,因为在这里,如果以某个点为终点,从前面到这个位置所需要的最小健康点数,就是前面消耗健康点数到这个位置还剩1个健康点数,但到这个位置还剩一个健康点数,要是没到右下角呢,还要走好多步,肯定是还没到右下角就已经死掉了。所以,这里的状态表示:定义以某个位置为起点,到达右下角所需要的最小健康点数。如图:我们想在dp表的四角星位置放值,放的是在原表中从四角星位原创 2023-12-08 20:28:38 · 596 阅读 · 10 评论 -
LeetCode题:931下降路径最小和
这里,我们再原表基础上要多加1行、2列,其中,第一行可以放0,因为dp对应原表的i j 位置,加上0是不影响这个映射位置要放的值。但是第一列和最后一列就不能放0了,因为定义dp表的位置,都要从左上,正上,右上取出最小值,再加上原表在dp表上映射的位置;假设到达这个位置时,求到这里用的最小路径和,那么就是左上,正上,右上间选一个最小值,加上四角星位置原表的路径值。而左上,正上,右上在dp表中放的都是到达他们位置的最小路径,这也是我们状态表示时的定义。可以从第一行中的任何元素开始,并从每一行中选择一个元素。原创 2023-12-06 15:03:49 · 391 阅读 · 26 评论 -
LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数
给你一个整数数组nums,你需要找出一个,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的子数组,并输出它的长度。5你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。原创 2023-11-26 15:22:59 · 518 阅读 · 38 评论 -
LeetCode题 338比特位计数,20有效的括号,415字符串相加
利用栈的这种数据结构,对比前一个括号左是否和当前的右括号匹配,利用栈的先进后出的特性,当遇到一个左括号,就放进栈里面一个右括号,取到的字符是右括号时,就判断这个这个右括号和栈里的栈顶元素是否相等,不相等就返回false,相等就弹出,继续下一次判断,。如果我们求21的二进制1的个数,那么就可以求20的二进制1的个数 + 1,求20的二进制1的个数就可以求16的二进制1的个数 + 1,求16的二进制1的个数就可以求0的二进制1的个数 + 1。所以 i 为偶数时,我们算它右移一位的数二进制1个个数就好了。原创 2023-11-17 21:41:30 · 241 阅读 · 9 评论 -
LeetCode题94,44,145,二叉树的前中后序遍历,非递归
注意:解题都要用到栈。原创 2023-11-13 18:36:37 · 203 阅读 · 26 评论 -
LeetCode题:83删除排序链表中的重复元素 141环形链表
那么这个环形链表也一样,我们可以定义一个slow和fast链表,slow一次走一步,fast一次走两步,只要fast或者是fast.next不为null,就一直遍历这个链表,如果slow和fast相遇了,那么这个链表肯定是环形链表,如果没在遍历了,即fast为null或者是fast.next为空,那么这一定不是环形链表。我们从图可以看到,1和1相等,那么我们头结点的next指向就是2了,那么这就出现了一个新的链表,我们就要删除这新的节点链表中的重复元素,依次类推,这不就是递归吗?,判断链表中是否有环。原创 2023-11-05 13:27:52 · 289 阅读 · 40 评论 -
LeetCode题:21合并两个有序链表
定义一个定义一个新的链表,再定义一个临时链表,遍历两链表,比较list1和list2的值,谁小就把谁放进临时链表里,同时,小的那个链表还要走到next链表中,继续下次list1和list2的比较。依次类推,如果某一个链表遍历完了,那就把剩下一个没有遍历完的链表全部放进tmp中,最后返回记录tmp的头结点。我们判断完一次谁的节点小,就改变一次小链表的指向,那么这时我们就可以又看成两个链表的合并,这不就是递归吗。新链表是通过拼接给定的两个链表的所有节点组成的。时间复杂度:O(M+N)时间复杂度:O(M+N)原创 2023-11-03 21:29:13 · 193 阅读 · 13 评论 -
LeetCode题:88合并两个有序数组,283移动零,448找到所有数组中消失的数字
nums1或nums2谁先遍历完,就要把没遍历完的数组剩下全部元素都放进新的数组中。原创 2023-10-29 22:18:37 · 232 阅读 · 17 评论 -
LeetCode题:1:两数之和
由上图可知,target = 20,这题有多种解法但是这样时间复杂度就很高了,要定义两个下标,列举出所有两个不同元素相加的值,同时记录下标,看是否等于target,时间复杂度为O(N^2);我们每得到nums[i]这个元素,都判断map里面有没有nums[i]这个元素注意:map里的key为nums的元素,val为nums元素的下标时间复杂度:O(N)。原创 2023-10-28 21:48:46 · 185 阅读 · 13 评论 -
LeetCode题:70爬楼梯,126斐波那契数
第一次爬一个台阶,那方法数就是爬这一次台阶加上剩下n-1个台阶的走法,爬两个台阶,那方法数就是爬完这两个台阶再加上剩下n-2个台阶的走法。每次往下找之前都记录一下map里面有没有n这个斐波那契数,有就不用继续往下找了,直接返回这个斐波那契数,没有就继续往下找,我们定义result放n的斐波那契数,pre放n的前一个斐波那契数,prePre放n的前两个斐波那契数。由题可知,每次可以爬1个或者2个台阶,假如有n个台阶,会有多少种走法?,也就是上图的公式,非递归的解法,我们就用循环来解决,从此图我们可以看出,原创 2023-10-27 18:31:11 · 408 阅读 · 13 评论