左神刷题班top150
leetcode top150
hello_brucebat
这个作者很懒,什么都没留下…
展开
-
【面试常考150题】1、88合并两个有序数组
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。输入:nums1 = [0], m = 0, nums2 = [1], n = 1。输入:nums1 = [1], m = 1, nums2 = [], n = 0。解释:需要合并 [1,2,3] 和 [2,5,6]。解释:需要合并的数组是 [] 和 [1]。输出:[1,2,2,3,5,6]原创 2023-12-07 22:47:17 · 298 阅读 · 0 评论 -
leetcode 28. 找出字符串中第一个匹配项的下标
【代码】leetcode 28. 找出字符串中第一个匹配项的下标。原创 2023-08-10 18:00:53 · 218 阅读 · 0 评论 -
leetcode 26. 删除有序数组中的重复项
遍历数组,当这一个数和前一个数重复,跳过。当不重复,填到对应位置,这个对应位置由slow变量记录。原创 2023-08-04 17:31:23 · 188 阅读 · 0 评论 -
leetcode 23. 合并 K 个升序链表
【代码】leetcode 23. 合并 K 个升序链表。原创 2023-08-04 15:17:45 · 111 阅读 · 0 评论 -
leetcode 21. 合并两个有序链表
当排在前面的罗马数字大于后面的罗马数字,就正常化成阿拉伯数字相加。如果小,那就是将小的数转成负数,再加就ok。但也是需要模拟的,就是哪一字母代表哪个数值。罗马转整数要考虑先后顺序。原创 2023-07-19 18:01:36 · 1087 阅读 · 0 评论 -
leetcode12. 整数转罗马数字
其实我不需要遍历也不需要知道是几位,我不管是几位,我把这个数都整除一下10*所有位数(因为最大是千位),当整除得到的是0,那意味着这个数没到这么多位或者这一位是0,我不管,当是0时我直接罗马字符加空就行。直接模拟出1-10,10-100,100-1000,1000-3000的罗马字符,我只要知道了这个数是几位,那每一位的数值我都可以取出来,我就可以直接定位C数组。然后每一位的数在哪个区间,我取出来,然后直接相加就ok!那我是不是就要遍历每一位,并且知道目前是第几位?首先难点在于我不知道这个数是几位。原创 2023-07-19 17:50:45 · 928 阅读 · 0 评论 -
leetcode 11. 盛最多水的容器
当我们往内收指针的时候,矩形的长(我们看作横坐标)会缩小。要使矩形面积变大,只有当宽度增加的时候才有可能。所以如果你的上限是你的短的那一条。而你必须要改变你的上限,才会使得总体面积变大。你移动长的那条挡板,结果永远不会比现在好,为什么?因为矩形长缩小,宽度不会变化甚至可能会变小,面积肯定不会变大。但如果你移动短的那根挡板,如果移动到更长的,你的面积才会有可能变大。要使面积变大,那中间可能又有两根比左右更长的挡板才有可能。然后不管谁先移动,左挡板最终回到最边更长,右挡板最终回到右边更长。原创 2023-07-19 16:51:11 · 898 阅读 · 0 评论 -
leetcode10. 正则表达式匹配
当s[i-1] 和 p[j-1]匹配时,这个串是否匹配看s[0:i-1]和p[0:j-1]是否匹配就行。1、 p[j-2]消失的情况下,也就是考察s[0:j-1]和p[0:j-2],即dp[j-1][j-2]3、p[j-2]存在多次,其实也是考察s[0:j-2]和p[0:j-2],即dp[j-2][j-2]?2、p[j-2]存在一次,也就是考察s[0:j-2]和p[0:j-2],即dp[j-2][j-2]当s[i-1] 和 p[j-1]不匹配时,不意味着s和p不匹配。当p[j-1]不是,可能不匹配。原创 2023-07-18 13:15:36 · 86 阅读 · 0 评论 -
leetcode08. 字符串转换整数 (atoi)
这题主要是用到了ascii码,0-9的ascii码是 48-57,直接判断ascii码是不是在48-57范围就ok。+/-号就不用ascii了,因为可以直接判断+和-。注意,这题开头必须是数字,如果不是数字或者正负号,直接返回0。这题不是从字符当中取数值。而是提取字符开头的数字,如果不是数字就返回0。思路就是先判断这个字符是否“合格”,也就是开头是否“有数”。如果有,则下一步,去掉开头的0和结尾的无用字符。最后将字符转为数字格式。原创 2023-07-17 15:46:07 · 84 阅读 · 0 评论 -
leetcode0007. 整数反转
所以这题是先取个位数,取完把个位数抹掉,即 %10 // 10。而且要注意,反转的话,每加一位之前都要乘以10。老是记不清//和%,//是向0取整,%是取余。对10向0取整就是抹掉个位数。对10取余就是取个位数。原创 2023-07-14 10:24:00 · 89 阅读 · 0 评论 -
5. 最长回文子串:manacher算法
manacher算法就是遍历到一些中心的时候不需要重新左右扩,因为manacher算法就是排除掉了不可能是最长回文子串的中心,还有以一种巧妙的方式一下子就得出当前回文中心点的暂时左右边界,虽然不是最左和最右,但不需要从中心点开始扩了。fdc__i’__cdeaedc__i__b,这个是i‘的回文左边界在a的左边界之外了。b__i’__cac__i__c , 由于i’的回文左边界在a的左边界上,所以i和i’只能保证在a内相同。a的左边界点到i‘的距离 = i‘坐标 - a + a的回文半径。原创 2023-07-11 21:53:18 · 229 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数(hard,但很受用,解决了两个数组的topk问题)
怎么求两个等长数组的上分位数?本质也是去掉不可能是上分位数的数字,去掉之后递归这两个数组,知道两个数组长度为1。目的是化为 “两个等长数组求上分位数”等价。也就是求出这两个等长数组的上分位数就相当于求出了topk。这个目的就涉及了两个问题,一个是怎么化成这种形式,另一个就是怎么求两个等长数组的上分位数?分三种情况:k <=短数组长度, 短数组长度<k<=长数组长度, k>=长数组长度。首先是找出两个正序数组并起来的topk,就自然可以求出中位数啦!2、短数组长度<k<=长数组长度。1、k <=短数组长度。原创 2023-07-11 14:44:53 · 84 阅读 · 0 评论 -
0003 最长无重复子串的长度(多写写)
这题的思路是,某个位置结尾的最长长度,取决于两个因素,一个是当前位置的字符出现在之前字符的位置,还有就是上一个位置的字符往前回去的最长长度(已经求出)。两者的较小值,则为该位置字符为结尾的最长长度。动规的题目某个位置的值肯定取决于之前的位置,很多题都是取决于上一个位置的值。子串子数组的题很重要的一个切入点是:遍历数组,以某个字符为结尾。然后就衍生出模拟法(其实就是肉眼找规律法)和动态规划法。动规的思考模式就是该位置的值取决于什么因素,找出来!原创 2023-07-07 14:35:39 · 82 阅读 · 0 评论 -
0002. 两数相加 左神代码改python(多写写)
【代码】0002. 两数相加 左神代码改python。原创 2023-07-07 12:54:20 · 57 阅读 · 0 评论 -
0001. two sum两数之和 左神代码改python
【代码】0001. two sum两数之和 左神代码改python。原创 2023-07-07 11:28:21 · 71 阅读 · 0 评论