LeetCode笔记
西瓜和柚子你喜欢哪个
这个作者很懒,什么都没留下…
展开
-
LeetCode-[数组]-寻找两个数组的中位数
1. 题目给两个有序数组,找出数组归并后的中位数。小技巧设arr1 长度为 n,arr2 长度为 m。k1 = (n + m + 1) / 2 - 1; // 减1 是因为数组下标从 0 开始k2 = (n + m + 2) / 2 - 1;则两个数组归并排序后的中位数是:(k1+k2) / 2.02. 暴力解归并两个数组,再找。时间复杂度:O(M+N)空间复杂度:...原创 2020-01-30 17:00:16 · 220 阅读 · 0 评论 -
LeetCode-[数组]-接雨水(三种解法)
1. 暴力解法O(N^2)遍历数组,找出 i 左右两边的最大值,计算出 i 位置能存的水public int trap(int[] height) { if (height == null || height.length < 3) { return 0; } int res = 0; for ...原创 2020-01-19 15:19:41 · 512 阅读 · 0 评论 -
LeetCode-[动态规划]-最小编辑距离
并没有动态规划的基础,所以这里要补充自己理解的动态规划。分为三步:什么是动态规划理解这道题目,什么是最小编辑距离的算法代码怎么写1. 什么是动态规划动态规划和递归关系密切,都是大问题转化成小问题。但是有区别:递归有大量重复的步骤,而动态规划则将重复的步骤的结果记录下来,以后遇到重复的步骤就直接用结果而不重复执行步骤,这样就大量减少了时间复杂度。1. 动态规划状态方程经常长这样...原创 2020-01-18 23:30:12 · 1061 阅读 · 0 评论 -
LeetCode-[链表]-翻转链表
1. 双指针迭代翻转链表翻转链表和交换两个变量的操作大同小异。首先需要一个prev指针(指着当前节点的前一个节点),一个cur指针(指着当前节点)翻转链表需要注意的一点是:链表之间靠指针连接,如果贸然将某个节点的next指向其他节点,就有可能造成该节点的丢失,所以翻转链表时(单向或双向),都要注意保存它的周围环境。public ListNode reverseList(ListNode h...原创 2020-01-17 21:39:33 · 194 阅读 · 0 评论 -
LeetCode-[哈希链表/LRU算法]-LRU缓存机制
1. LRU算法是什么?1.1. LRU算法是一种按时间先后的缓存淘汰策略。比如手机后台可以同时开的程序为3个,则当你打开第四个时,按照lru策略,最早被打开的程序被认为是“无用的”,它被淘汰。这有点像队列,从队列头进,队列头一直是“最近”使用的应用。当队列满了,从队列尾删除。值得一提的是:队列中的应用被使用后,它就变成“最近使用”了,应该提到队列头,在写代码时要注意这一点。1.2. L...原创 2020-01-17 16:54:48 · 394 阅读 · 0 评论 -
LeetCode-[字符串/动态规划]-最长回文子串#5
1. 题目描述给一字符串,输出其中最长回文。如abab,最长回文为aba,或bab。2. 如何判断是否为回文?对 abcddcba 来说,分别从两头开始比对。如果两头不一样,那肯定不是。如果一样,继续比对。只需比对 length / 2 次。public static boolean isPalindromic(String s) { int len = s.len...原创 2019-12-27 12:41:29 · 87 阅读 · 0 评论 -
LeetCode-[数组/栈]-每日温度
1. 图解2. 代码```javapackage leetCode.temperatures;import java.util.Stack;/** * 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 * * 例如,给定一个列表 temperatures = [73, 74,...原创 2019-12-21 19:15:39 · 164 阅读 · 0 评论