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]输出:true1.通过 双指针技巧 中的快慢指针来找到链表的中点
876. 链表的中间结点返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。通过 双指针技巧 中的快慢指针来找到链表的中点
面试题 02.02. 返回倒数第 k 个节点输入: 1->2->3->4->5 和 k = 2 输出: 4快慢指针,快指针先走k步,此时快慢指针的距离为k,然后一起走,直到快指针走到尾节点时跳出,此时慢指针指向倒数第k个节点

数组

数组描述题解
1.两数之和nums = [2,7,11,15], target = 9HashMap,遍历数组 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] 输出:51.动态规划 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];


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部