随笔分类 - 算法
摘要:在线验证算法 排序数组 算法实现 1. 快排 思路 树的前序遍历。 每次选取一个数作基准值,将小于基准值的数放在左边,大于基准值的数放在右边。遍历左子树及右子树,直到只有1个数为止。 实现 class QuickSort { public static void sort(int[] nums) {
阅读全文
摘要:# 思路 LRU算法,访问/更新/插入都会将数据置于队尾(假设队头淘汰)。 看3种情况的变化: * 插入:简单置于队尾即可。 * 更新:删除原有节点,新增节点置于队尾。 * 访问:将原节点提至队尾。 除了插入只需要简单接到链表尾部以外,更新和访问都是可能操作链表中间的,所以自然地就需要引入Map来快
阅读全文
摘要:|题目|难度|要点| | | | | |拼车|●|不需要构造原始数组,直接判断即可| |航班预定统计|●|构造原始数组| |区间加法|●|构造原始数组| 差分数组中,diff[i] 就是 nums[i] 和 nums[i-1] 之差;diff[0] = nums[0]; 拼车 class Solut
阅读全文
摘要:|题目|难度|要点| | | | | |区域和检索 - 数组不可变|●|构造前缀和数组,避免每次O(n)遍历统计区间和| |二维区域和检索 - 矩阵不可变|●|矩阵前缀和,并通过矩阵加减拼凑目标矩阵| 区域和检索 - 数组不可变 class NumArray { private int[] preS
阅读全文
摘要:|题目|难度|要点| | | | | |删除有序数组中的重复项|●|快指针与慢指针值不同,那么应该将值放在慢指针下一位| |移除元素|●|快指针对应值若不需移除,那么应该将值放在当前慢指针| |最长回文子串|●|以当前位置或者当前位置及相邻位置扩散寻找回文子串 删除有序数组中的重复项 class S
阅读全文
摘要:|题目|难度|要点| | | | | |回文链表|●|栈或者后半段反转| 栈 递归 class Solution { ListNode node; public boolean isPalindrome(ListNode head) { node = head; return traverse(he
阅读全文
摘要:|题目|难度|要点| | | | | |反转链表|●|注意新节点头| |反转链表II|●|注意新节点头和后续的节点,需要和其他部分拼接| |K 个一组翻转链表|●|注意新节点头和后续的节点,需要和其他部分拼接| 递归 反转链表 public ListNode reverseList(ListNode
阅读全文
摘要:|题目|难度|要点| | | | | |分隔链表|●|快慢指针:不用两个新链表拼接,使用原地修改| |合并K个升序链表|●|最小堆:类ProirityQueue的使用| |环形链表|●|快慢指针:相遇有环| |环形链表II|●|快慢指针:入环第一个节点| 分隔链表 题目要求按原顺序,以x值将小的放链
阅读全文