leet code分类总结
codetop
- 链表
- 数组
- 滑动窗口
链表
| 链表 | 描述 | 题解 |
|---|---|---|
| 82. 删除排序链表中的重复元素 II | 输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5] | 使用递归如果不等值则删除,如果等值则要进行判断,注意&&,注意else,对move的判断 |
| 83. 删除排序链表中的重复元素 | 输入:head = [1,1,2] 输出:[1,2] | cur.next = cur.next.next; |
| 203. 移除链表元素 | 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] | 添加一个虚拟头结点 |
| 面试题 02.01. 移除重复节点 | 移除未排序链表中的重复节点。保留最开始出现的节点。 | 1.哈希表2.删除某节点是通过双指针pre.next = cur.next |
| 61.旋转链表 | 旋转链表,将链表每个节点向右移动 k 个位置。 | 先找到尾节点。再找到第n-k个节点 。指针遍历。注意k的范围 |
| 92. 反转链表 II | 输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5] | 1.头插法 2. 凡是需要考虑左右边界的问题, 加个虚拟头节点准没错. |
| 142. 环形链表 II | 环开始的位置 | 1.快慢指针;2.快慢指针相遇时,让其中任一个指针指向头节点,然后让它俩以相同速度前进,再次相遇时所在的节点位置 |
| 143. 重排链表 | 给一个链表,然后依次头尾头尾头尾取元素,组成新的链表 | 1.存储解法 ArrayList ;2.递归解法(未看)3.利用一头一尾取元素的特性 |
| 234. 回文链表 | 输入:head = [1,2,2,1]输出:true | 1.通过 双指针技巧 中的快慢指针来找到链表的中点 |
| 876. 链表的中间结点 | 返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 | 通过 双指针技巧 中的快慢指针来找到链表的中点 |
| 面试题 02.02. 返回倒数第 k 个节点 | 输入: 1->2->3->4->5 和 k = 2 输出: 4 | 快慢指针,快指针先走k步,此时快慢指针的距离为k,然后一起走,直到快指针走到尾节点时跳出,此时慢指针指向倒数第k个节点 |
数组
| 数组 | 描述 | 题解 |
|---|---|---|
| 1.两数之和 | nums = [2,7,11,15], target = 9 | HashMap,遍历数组 nums,i 为当前下标,每个值都判断map中是否存在 target-nums[i] 的 key 值 |
| 15.三数之和 | 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 | 1.特判,对于数组长度 n,如果数组为 null或者数组长度小于 3,返回 []。2.Arrays.sort()对数组进行排序。3.遍历排序后数组:双指针,以及去除重复解,判断左界和右界是否和下一位置重复。并同时将 L,R 移到下一位置,寻找新的解 |
| 26.删除有序数组中的重复项 | 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 | 快慢指针技巧 nums[fast] != nums[slow]) slow++; nums[slow] = nums[fast]; |
| 53.最大子数组和 | 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 | 动态规划,子问题,取最大值.子问题 1:以 -2− 结尾的连续子数组的最大和是多少;子问题 2:以 11 结尾的连续子数组的最大和是多少;子问题的定义必须以一个数结尾 |
| 88.合并两个有序数组 | 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] | 从后往前确定两组中该用哪个数字,另一个是结束条件以第二个数组全都插入进去为止 |
| 118.杨辉三角 | 输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] | 取错一位,再逐个相加;Integer[] //Integer[] 转 List List list2 = Arrays.asList(integers1) |
| 121.买卖股票的最佳时机 | 输入:[7,1,5,3,6,4] 输出:5 | 1.动态规划 dp[i][k][0 or 1] 0 <= i <= n - 1, 1 <= k <= K n 为天数,大 K 为交易数的上限,0 和 1 代表是否持有股票。2.暴力解法,第二个减去第一个 |
| 169.多数元素 | 为 n 的整数数组,找出其中所有出现超过 ⌊ n/2 ⌋ 次的元素。 | 摩尔投票法,相互抵消 |
| 229.求众数 II | 为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 | continue:跳过当前程序,直接执行下一次程序 |
| 剑指 Offer 53 - I. 在排序数组中查找数字 I | 统计一个数字在排序数组中出现的次数。 | 寻找右边界和左边界,right - left - 1; 二分 |
滑动窗口
| 数组 | 描述 | 题解 |
|---|---|---|
| 3. 无重复字符的最长子串 | 输入: s = “abcabcbb” 输出: 3 | 当再进入 a,队列变成了 abca,把队列的左边的元素移出 |
| 26.删除有序数组中的重复项 | 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 | 快慢指针技巧 nums[fast] != nums[slow]) slow++; nums[slow] = nums[fast]; |
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
