想成为算法高手 2026.3数组lc704.二分查找 https://leetcode.cn/problems/binary-search/设一个区间来框住待查数组 这个框可以是闭区间/左闭右开区间。记住middle的计算公式永远不变 是 left (right-left) / 2lc27.移除元素 https://leetcode.cn/problems/remove-element/暴力法or双指针法双指针法思想慢指针代表新数组快指针代表原数组。指针行进的同时数组原地变化这样就在一个for内解决了两层for的工作。lc977 有序数组的平方 https://leetcode.cn/problems/squares-of-a-sorted-array/还没做lc209.长度最小的子数组 209. 长度最小的子数组 - 力扣LeetCode滑动窗口很好想到 终于有我会做的题了 也是破天荒手敲了一次代码要考虑到无解的情况我有一种与第一个题解不同的做法 思路一致while循环更好看public int minSubArrayLen(int target, int[] nums) { int n nums.length; int l 0, r 0; int sum 0; int ans Integer.MAX_VALUE; while (r n || sum target) { if (sum target) { ans Math.min(ans, r - l); sum - nums[l]; l; } else { sum nums[r]; r; } } return ans Integer.MAX_VALUE ? 0 : ans; }lc59.螺旋矩阵II用时最长的一题 需要找规律 并且注意细节链表Lc203.移除链表元素可以添加虚拟头节点来做 也可以用递归实现 递归的代码不好理解见下public class Lc203 { public ListNode removeElements(ListNode head, int val) { if(headnull) return null; head.nextremoveElements(head.next,val); if(head.valval){ return head.next; }else{ return head; } } }【对递归的理解】两处递归函数调用两处之差就是递归函数剩下那些代码要解决的部分——head头节点。“解决”即返回head/head.next。对于递归题必须从整体来理解一份代码/自己写代码如果head是空链表直接return题目答案null。接下来递归调用函数把头节点后面的val节点全部删掉。然后处理头节点如果头节点是val节点就直接return题目答案head.next否则return head。lc707.设计链表用java的面向对象格式写算法题 还是写得不够熟练lc206.反转链表我真的想到要用递归了 但想了好久还是不熟悉怎么用递归的思想解题对于链表1- 2- 3的 理解为1- 2- 3- null更好4这题还没看题解lc24.两两交换链表节点【递归法、迭代法】递归法太高级了算法题要先考虑特殊的输入数据空链表、无法满足题意等这样能让后面的代码不报错越界等lc19.删除链表的倒数第N个节点方法1.计算链表长度 2.栈/数组 3.双指针1和3是常见的可替换方法面试题02.07. 链表相交方法1.哈希集合 2.计算链表长度 3.双指针对于链表“获取长度”和“双指针”是很常用的方法因为这样就可以让链表成为从后往前也很好操作的数据结构。“哈希表”也是很常用的因为链表结构过于分散需要遍历才能获取信息使用哈希表就可以记录下来遍历过的节点。lc142.环形链表II方法1.哈希表 2.快慢指针哈希表lc242.有效的字母异位词 242. 有效的字母异位词 - 力扣LeetCode方法1用Arrays类的方法Arrays类中都是静态方法.sort(arr) 给数组从小到大排序.binarySearch(arr, val) 在有序数组中找某个值的索引.toString(arr) 转成字符串否则直接打印数组打印的是地址注意Arrays是操作数组的工具类ArrayList是集合类方法2哈希表lc349.两个数组的交集没学set 也没时间看了 先跳过吧