
重温经典
文章平均质量分 59
阿飞算法
这个作者很懒,什么都没留下…
展开
-
【重温经典】接雨水 I
【重温经典】接雨水 I方法1:单调栈 public int trap(int[] height) { int res = 0; Stack<Integer> stk = new Stack<>();//存数组的下标索引 int cur = 0; //当前位置的下标 while (cur < height.length) {原创 2021-11-26 19:01:40 · 305 阅读 · 0 评论 -
【重温经典】Pow(x, n)
【重温经典】Pow(x, n)二进制可以转化成十进制,假设十进制正整数n,其二进制的表示方式是:「bm...bi...b2b1b0b_m...b_i...b_2b_1b_0bm...bi...b2b1b0」则 n=20b0+21b1+22b2+...+2ibi+...2mbmn=2^0b_0+2^1b_1+2^2b_2+...+2^ib_i+...2^mb_mn=20b0+21b1+22b2+...+2ibi+...2mbm则xn=x(20b0+21b1+22b2+...原创 2021-11-11 08:48:15 · 440 阅读 · 0 评论 -
【重温经典】LRU 缓存机制
需要一个哈希双端链表,DoubleLinkedNodeDoubleLinkedNodeDoubleLinkedNode这个双端链表有下面的几个属性 class DoubleLinkedNode { int key, value;//k,v DoubleLinkedNode pre, next;//前驱接节点,后继节点 public DoubleLinkedNode(int key, int value) {..原创 2021-09-25 16:25:17 · 120 阅读 · 0 评论 -
【重温经典】背包思想解决零钱兑换问题
背包思想解决零钱兑换问题322.零钱兑换题目分析要求的是组成金额amountamountamount的最少的硬币数,从示例1可以看出,硬币可以被重复使用,这符合完全背包的思想,只要金额不超过总金额,也就是只要不超过总的背包容量,把背包撑爆。完全背包问题的抽象模型动态规划的几大要素:状态,选择以及边界条件参数定义:NNN件物品VVV背包的总容量CiCiCi放入第iii件物品耗费的费用WiWiWi放入第iii件物品得到的价值动态规划的几大要素:状态,选择以及边界条件每件物品原创 2021-09-18 09:41:55 · 414 阅读 · 0 评论 -
【重温经典】 完全平方数
【重温经典】 完全平方数方法1.1:BFS(从底向上)准备一个队列q,装从0开始的数,将每一种当前的处理到的完全平方数和vis用来标记当前处理的完全平方数和是否被访问过,没有访问的话,添加到q中等待访问从0开始,每一层叠加,当完全平方数和等于n的时候,这时候找到的层数level一定是最小的,即完全平方数的个数public int numSquares(int n) { Queue<Integer> q = new LinkedList<>(); Set原创 2021-09-17 08:50:53 · 271 阅读 · 0 评论 -
【重温经典】排序链表
【重温经典】排序链表方法1:分治(递归) public ListNode sortList(ListNode head) { if (head == null || head.next == null) return head; //快慢指针找分隔点,slow为下一段的起点,prev是slow的前一个节点 ListNode prev = null, slow = head, fast = head;原创 2021-09-15 18:13:59 · 108 阅读 · 0 评论 -
【重温经典】二叉树的最近公共祖先
【重温经典】二叉树的最近公共祖先方法1:DFS思路:1.leftleftleft和rightrightright都为空,说明rootrootroot的左右子树中都不包含ppp和qqq节点,返回nullnullnull即可2.leftleftleft不为空,rightrightright为空,说明ppp和qqq不在右子树中(因为右子树为空了),这时,返回leftleftleft,这里面有下面的两种情况:ppp和qqq都在leftleftleft即左子树上,而rootrootroot节点恰好指向了p原创 2021-09-15 09:25:38 · 116 阅读 · 0 评论 -
【重温经典】数据流的中位数
【重温经典】数据流的中位数方法1:大小根堆维护maxHeap 和minHeap,保持maxHeap.size() = minHeap.size() 或者maxHeap.size() = minHeap.size()+1maxHeap维护的数据属于整个数据流的下半部分的数据,minHeap维护的数据属于整个数据流上半部分的数据返回中位数的时候,注意总体的数据个数的奇偶性class MedianFinder { //大根堆,从栈顶到栈底 依次从大到小 PriorityQue原创 2021-09-10 07:09:44 · 168 阅读 · 0 评论 -
【重温经典】最小栈
【重温经典】最小栈方法1:辅助栈[浪费空间]基础版辅助栈,准备一个data, 数据栈,准备一个help 辅助栈其中data的存数据的,help辅助栈用来存最小值,在push操作时,help如果栈顶元素大于待push的元素,将待push的元素塞进help中,如果不是,则重复塞一次help的栈顶元素,注意help为空的时候特殊处理下准备两个栈,data和help,做push操作时,需要保持help栈顶的元素始终最小,data的数据正常推入,help栈顶维持最小,在执行getMin方法的时原创 2021-09-01 19:57:22 · 236 阅读 · 1 评论 -
【重温经典】滑动窗口最大值
【重温经典】滑动窗口最大值基础Deque有三种使用形式://普通队列(一端进另一端出):Queue queue = new LinkedList()或Deque deque = new LinkedList()//双端队列(两端都可进出)Deque deque = new LinkedList()//堆栈Deque deque = new LinkedList()Deque是一个线性collection,支持在两端插入和移除元素。名称 deque 是“double ended qu原创 2021-09-01 14:15:23 · 250 阅读 · 0 评论 -
【重温经典】二叉搜索树中第K小的元素
这是一道求kth的问题方法1:DFS int res = -1; int k; public int kthSmallest(TreeNode root, int k) { this.k = k; dfs(root); return res; } private void dfs(TreeNode root) { if (r原创 2021-08-30 19:28:44 · 94 阅读 · 0 评论 -
【重温经典】单词搜索II
【重温经典】单词搜索II方法1:朴素版DFS借用79题的解法,遍历每一个word,暴力 int[] dx = {-1, 0, 1, 0}; int[] dy = {0, 1, 0, -1}; int m, n; List<String> res = new ArrayList<>(); public List<String> findWords(char[][] board, Strin原创 2021-08-26 09:08:02 · 233 阅读 · 0 评论 -
【重温经典】单词拆分 II
方法1:切片函数+记忆化搜索不带记忆化TLE Map<String, List<String>> cache = new HashMap<>(); List<String> wordDict; public List<String> wordBreak(String s, List<String> wordDict) { this.wordDi.原创 2021-08-25 21:12:36 · 296 阅读 · 0 评论 -
【重温经典】鸡蛋掉落
【重温经典】鸡蛋掉落背景这是一道经典的谷歌面试题,本文没有涉及「决策单调性」和「数学法」来解决本题方法1:暴力递归方法3的分析中,可以得出一个结论:需要不断的根据鸡蛋的碎与不碎来向下或者向上继续搜索,递归的最终则是要找到base case:当前楼层是0,则需要0次尝试当前楼层是1,则需要1次尝试当前楼层为n,但鸡蛋的个数为1,需要从1到n层一层一层往上试,尝试的次数即是楼层public int superEggDrop(int K, int N) { return原创 2021-08-21 15:07:22 · 411 阅读 · 0 评论 -
【重温经典】K个一组翻转链表
方法1:迭代需要注意是end节点的跳步的判断,可能不足k步,处理掉这种特殊情况 public ListNode reverseKGroup(ListNode head, int k) { ListNode dummy = new ListNode(-1); dummy.next = head; ListNode prev = dummy, end = dummy; while (end.next.原创 2021-08-18 20:49:28 · 179 阅读 · 0 评论