LeetCode
52Tiramisu
这个作者很懒,什么都没留下…
展开
-
【二叉树】专题
前序是先放到ans中,中序是中间放入,后序是最后放入。,这个函数可以递归的对二叉树进行遍历。前序、中序、后序,都是。原创 2024-01-27 12:13:56 · 461 阅读 · 1 评论 -
leetcode常见错误
错误原因,变量重复定义了。2024年1月26日。原创 2024-01-26 20:01:54 · 486 阅读 · 0 评论 -
20. 有效的括号
1.用map集合来存储括号对,而且用 右括号-key;左括号-value。使用反过来的条件比较,不用三次 if-else逐个对比。这样做的目的:①方便判断左右括号;3.直接返回 st.empty()原创 2024-01-18 11:35:14 · 352 阅读 · 0 评论 -
61. 旋转链表
旋转链表,将链表每个节点向右移动。给你一个链表的头节点。原创 2024-01-16 21:12:48 · 392 阅读 · 0 评论 -
leetcode82. 删除排序链表中的重复元素 II
【代码】leetcode82. 删除排序链表中的重复元素 II。原创 2024-01-16 11:09:49 · 360 阅读 · 0 评论 -
leetcode234. 回文链表
这里因数组大小不好定义,所以可以使用 栈vector。,请你判断该链表是否为回文链表。将链表转为数组,然后双指针判断即可。给你一个单链表的头节点。原创 2024-01-16 10:09:54 · 431 阅读 · 0 评论 -
leetcode19. 删除链表的倒数第 N 个结点
再遍历,找到要删除的结点的前面一个结点。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。先遍历一遍,获取链表长度。原创 2024-01-15 16:25:06 · 417 阅读 · 0 评论 -
leetcode206.反转链表
逐个遍历,更改当前结点的next指针,指向它的前驱结点。,请你反转链表,并返回反转后的链表。原创 2024-01-14 17:00:47 · 403 阅读 · 0 评论 -
21. 合并两个有序链表
新建一个链表结点p,然后同时遍历 list1 和 list2,如果 list1->val < list2->val,就将当前结点接在p后面,然后list1指针后移。新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。原创 2024-01-13 10:23:34 · 385 阅读 · 0 评论 -
leetcode141.环形链表
依次对链表进行遍历,①哈希表中有,直接返回true;②哈希表中没有,加入哈希表,继续往后遍历。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。来表示链表尾连接到链表中的位置(索引从 0 开始)。存在环:往下遍历下去可以遇到之前遍历过的元素。如果链表中有某个节点,可以通过连续跟踪。链表中有一个环,其尾部连接到第二个节点。仅仅是为了标识链表的实际情况。用哈希表,存储已经遍历过的元素。,判断链表中是否有环。给你一个链表的头节点。原创 2024-01-09 11:18:41 · 433 阅读 · 0 评论 -
leetcode3. 无重复字符的最长子串 [滑动窗口]
设置两个指针left、right。固定left,向右移动right。设置set集合存储滑动窗口中的字符元素。情况②,若在set集合中找到,则删除left指针指向的元素,直到set中没有与 s[right]相同的元素。情况①,当s[right] 没有在set集合中找到时,就将它插入到set集合;,请你找出其中不含有重复字符的。请注意,你的答案必须是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。,所以其长度为 3。,所以其长度为 1。,所以其长度为 3。原创 2023-10-17 19:36:05 · 213 阅读 · 0 评论 -
leetcode209. 长度最小的子数组 [滑动窗口] 待更正
如果不存在符合条件的子数组,返回。是该条件下的长度最小的子数组。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。原创 2023-10-17 16:18:00 · 160 阅读 · 0 评论 -
leetcode345. 反转字符串中的元音字母 【简单题】
简单题竟然想了一个小时,呜呜。原创 2023-09-25 15:53:35 · 157 阅读 · 0 评论 -
leetcode20. 有效的括号 [简单题]
②“( ] )”,当有这样的右括号时,也让他入栈,最后判断栈非空,则返回 false;典型的栈问题,数据结构书中都有用栈来作括号匹配的问题。①字符串长度为奇数,直接返回false。,判断字符串是否有效。原创 2023-09-19 21:18:15 · 171 阅读 · 0 评论 -
leetcode55.跳跃游戏 【贪心】
遍历每个数字,看该数字的“覆盖范围” 能否覆盖到最后一个元素。如果可以覆盖到最后一个元素,则该数组可以跳跃到最后一个元素。无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。不能遍历依次遍历每个数字每种跳跃能否到达终点,这样的话会非常复杂。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回。给你一个非负整数数组。原创 2023-09-01 15:15:27 · 273 阅读 · 0 评论 -
leetcode455. 分发饼干 【贪心】
把饼干和胃口都从大到小排序,针对饼干遍历 胃口。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。饼干大小 s[j] >= 胃口大小 g[j] ,就可以分发饼干。你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。,这是能让孩子们满足胃口的饼干的最小尺寸;你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。你拥有的饼干数量和尺寸都足以让所有孩子满足。原创 2023-08-31 14:42:14 · 402 阅读 · 0 评论 -
leetcode121. 买卖股票的最佳时机
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。一次for循环,先假定最小 price 是 prices[0],最大差值。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。返回你可以从这笔交易中获取的最大利润。解释:在这种情况下, 没有交易完成, 所以最大利润为 0。设计一个算法来计算你所能获取的最大利润。输入:prices = [7,6,4,3,1]输入:[7,1,5,3,6,4]原创 2023-08-30 15:58:13 · 420 阅读 · 0 评论 -
leetcode189. 轮转数组
输入: nums = [1,2,3,4,5,6,7], k = 3。输入:nums = [-1,-100,3,99], k = 2。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]按下标输出压入新数组,最后赋值到原数组。输出: [5,6,7,1,2,3,4]输出:[3,99,-1,-100]原创 2023-08-29 14:37:43 · 274 阅读 · 0 评论 -
80. 删除有序数组中的重复项 II
【双指针】维护一个区间,left作为左边界,right作为有边界。解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3。解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。输入:nums = [0,0,1,1,1,1,2,3,3]输出:7, nums = [0,0,1,1,2,3,3]输出:5, nums = [1,1,2,2,3]输入:nums = [1,1,1,2,2,3]原创 2023-08-29 14:12:49 · 368 阅读 · 0 评论 -
leetcode503. 下一个更大元素 II 单调栈
与之前 739、1475 单调栈的问题如出一辙,唯一不同的地方就是对于遍历完之后。栈中元素的处理,之前的栈中元素因无法找到符合条件的值,直接加入vector中。而这里需要再重头遍历一下数组,找是否有符合条件的,如果仍然找不到的话,才会把它赋值然后加入vector中。原创 2023-08-25 20:41:02 · 303 阅读 · 0 评论 -
leetcode1475. 商品折扣后的最终价格 【单调栈】
错误分析:入栈的是元素,如果之后出现相等的元素,则会覆盖哈希表中的值。原创 2023-08-25 19:58:10 · 533 阅读 · 0 评论 -
leetcode739. 每日温度 单调栈
想到用两个栈,一个维护元素、另一个维护下标。但是还是无法处理有重复元素的问题(用哈希表来存储的时候)。所以就看了答案的思路。②当前下标元素 > 栈顶元素,就出栈,并计算它们的下标之差,存入到这个出栈元素对应的数组里面。①栈为空 or 当前下标元素 <= 栈顶元素,入栈;从前往后遍历,维护一个单调栈。原创 2023-08-25 17:17:11 · 551 阅读 · 0 评论 -
leetcode496. 下一个更大元素 I 【单调栈】
从后往前遍历(当前值为t),如果栈中的值比 t 小,则出栈到没有比它小 或 栈空位置。然后设置哈希映射,键为 t,值为 栈顶元素。怎么样才能使得 用 nums1中的元素去 nums2中查找的时候,能够很快的不用遍历就可以查到第一个比它大的元素呢?这样,对于 nums2中的每一个元素,在hashmap中都存储了 第一个比他大的元素 的映射。先预处理 num2,使得对于他的每个元素,用一个哈希表来存储第一个比他大的元素的映射。【简单题】(暴力遍历法很简单)但是时间复杂度很高,n的立方级别了。原创 2023-08-25 15:14:51 · 381 阅读 · 0 评论 -
leetcode485. 最大连续 1 的个数
设置两个变量,cnt记录当前小区间的 1 的个数,然后maxcnt记录整个nums数组的 1 的个数(结束一个小区间,满足条件就更新一下)left左边界,right往右跑遇到0,则计算该长度。并更新cnt(最大连续1个数)。emmm怎么看答案一次遍历就可以完成呢?原创 2023-08-24 14:28:47 · 497 阅读 · 0 评论 -
463. 岛屿的周长
依次遍历每个格子,针对每个格子,再 依次遍历这个格子的每个边。做出来的报数组下标越界错误。,那么周长就加上当前边。原创 2023-08-23 15:34:26 · 64 阅读 · 0 评论 -
Leetcode 0814周总结
本周刷题:88, 108, 121, 219, 228, 268, 283, 303, 349, 350, 414, 448nums1={1, 2, 3 ,0, 0, 0}nums2={2, 5, 6}合成效果:nums1={1, 2, 2, 3, 5, 6}思路:【双指针】对两个数组设置双指针,依次比较哪个小就放入新数组。遍历完之后再把新数组复制给 nums1。108 将有序数组转换为二叉搜索树未做。121 买卖股票的最佳时机【动态规划】数组 nums1={1, 2, 3, 1},任一值在数组中出现至少两原创 2023-08-19 16:30:33 · 250 阅读 · 0 评论 -
leetcode414. 第三大的数
此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1。注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。把nums去重且排序,返回最后一个数或倒数第三个数即可。第三大的数不存在, 所以返回最大的数 2。如果不存在,则返回数组中最大的数。emmm好吧我承认,这个写的有点复杂了。给你一个非空数组,返回此数组中。你能设计一个时间复杂度。第三大的数是 1。原创 2023-08-18 14:59:55 · 273 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
例,遍历 nums[0],这里数字为 4,那么就让代表 下标为 4-1 的数字 + n。这样遍历完一圈之后。又因为当对应数字+n之后,它数组下标可能会大于8,所以在访问下标的时候,需要对8取模。这样就可以看出来哪个数字没有在数组中出现了。不另外设置哈希表,而是让自己充当哈希表。原创 2023-08-18 14:29:13 · 77 阅读 · 0 评论 -
leetcode349. 两个数组的交集
把两个vector分别放到set中(自动去重) ,然后遍历第一个set,如果在第二个set中可以找到该元素,就把它加入到 交集数组中。简单题,竟然想了20分钟= =输出结果中的每个元素一定是。[4,9] 也是可通过的。原创 2023-08-17 14:18:46 · 161 阅读 · 0 评论 -
leetcode283. 移动零
再想,从前往后遍历,利用 stl-vector 的特性,遇到0就从这个vector里面删除当前元素,但是删除这个元素的话,该vector数组结构会发生变化,即当前下标指向的自动变为下一个元素,所以下标这里要减1。一开始想,从前往后遍历,遇到0就挪到最后。类似于冒泡的思想,但是这样做的话时间复杂度可能是 三次方。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。,编写一个函数将所有。原创 2023-08-16 14:23:46 · 455 阅读 · 0 评论 -
leetcode228. 汇总区间
这里 num[1] = -2147483647,num[0] = -2147483648。因为int型可以表示的范围是:-2147483648 ~ 2147483647。从前往后遍历,low在前,high在后跑,如果high跑着发现它跟前面那个值相差不为1,说明这个区间在这里断了。这里使用 map 来存储区间,键key存区间开始,值value存区间终点。最后在输出的时候,判断键值是否相等,如果相等,就输出该值自己,如果不相等,就输出该区间。就是怎么可以避免fast == len的时候,再让它减1,原创 2023-08-15 17:26:11 · 510 阅读 · 0 评论 -
leetcode268. 丢失的数字
一开始还纳闷会不会有重复的元素,后来看到[0,n]范围,那么肯定有n+1个数字,然后要在n 个数字里面找谁没有,那肯定没有重复的元素,如果有重复,就不止缺少一个元素了。排序之后,看谁跟下标不一样,就返回它之前的那个值;如果遍历到最后发现都一样,那肯定就是最后一个值 n 丢掉了。这题简单的有点过分了吧。原创 2023-08-15 14:39:33 · 561 阅读 · 0 评论 -
leetcode219. 存在重复元素 II
设置一个set作为窗口,从前往后遍历,如果该值没有在窗口中,就加入,如果加入之后窗口的大小大于k,就踢出去set最开头的那个元素。借鉴如下思路(未看她代码),判断数组中是否存在两个。原创 2023-08-14 21:49:42 · 305 阅读 · 0 评论 -
leetcode217.存在重复元素
对数组进行排序之后,依次遍历,如果前后元素相同,则返回true。如果数组中每个元素互不相同,返回。如果任一值在数组中出现。原创 2023-08-12 14:48:43 · 203 阅读 · 0 评论 -
leetcode169. 多数元素
本题还有许多其他解法,待考究。(这个内存占用也太多了!你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。多数元素是指在数组中出现次数。建立哈希表,要用到map的知识。原创 2023-08-12 14:46:25 · 268 阅读 · 0 评论 -
leetcode118. 119.杨辉三角
可以发现从第三行开始,从第二个元素到倒数第二个元素,每个元素都是左上方和正上方元素的和。先初始化全1的半个矩阵,然后如果行数大于2,就从第三行开始遍历,改变对应位置的值。在「杨辉三角」中,每个数是它左上方和右上方的数的和。1. vector中数组初始化尺寸用到的是。生成「杨辉三角」的前 numRows。给定一个非负整数 numRows。2. vector二维数组的遍历。原创 2023-08-11 14:40:18 · 99 阅读 · 0 评论 -
leetcode88. 合并两个有序数组
将数组 nums2 直接放到 nums1 的后面,然后对nums1数组进行排序即可。思路二:使用双指针,建立一个新数组,比较两个数组,将较小元素插入到新数组中。最终,合并后数组不应由函数返回,而是存储在数组。使用 sort函数,必须在文件的头部添加。个元素表示应合并的元素,后。中,使合并后的数组同样按。排序函数sort的用法。原创 2023-08-10 17:03:29 · 133 阅读 · 1 评论 -
leetcode66—加一
③例如999这样全9的情况,就在vector后面添加一个元素0,然后把数组的第一个元素置为1,再把它之后的所有元素都变为0就好啦!②例如21999这样的情况,就从后往前遍历到第一个不是9的位置,把它加一,然后他之后的元素都赋值为0;①最后一个元素不是9,就直接最后一个元素++,然后返回即可;自己实现了代码,一次就通过啦!最高位数字存放在数组的首位, 数组中每个元素只存储。数组所表示的非负整数,在该数的基础上加一。然后看了题解的思路,发现是处理不同9的情况。数组-->数字,加一-->数组。原创 2023-08-10 17:27:47 · 106 阅读 · 0 评论 -
leetcode27—移除元素
看到示例里面数组是无序的,也就是说后面的元素也是可能跟给定 val值相等的,那么怎么处理呢。就想到了从前往后遍历,如果left对应的元素 == val时,就把最后一个元素挪过来,这样既缩短了数组长度,也解决了后面元素不好比较的问题。参考26题目双指针的思想,只不过这道题不是快慢指针。是我自己想出来的噢,我好棒哈哈哈哈。原创 2023-08-09 22:02:05 · 248 阅读 · 0 评论 -
leetcode26-删除有序数组中的重复项
慢指针 slow 走在后面,快指针 fast 走在前面探路,找到一个不重复的元素的时候就让slow前进一步并赋值给它。原创 2023-08-09 21:32:13 · 124 阅读 · 0 评论