leetCode
远腾飞
平凡的脚步也可以走完伟大的行程。
这个世界上任何奇迹的产生都是经过千辛万苦的努力而得的,首先承认自己的平凡,然后用千百倍的努力来弥补平凡。不要在应该奋斗的年华里,选择安逸。
展开
-
力扣技巧-回溯
回溯原创 2022-09-06 18:34:12 · 153 阅读 · 0 评论 -
力扣技巧-dfs
dfs进阶原创 2022-09-04 01:34:04 · 189 阅读 · 0 评论 -
算法技巧-DFS、BFS
bfs原创 2022-09-01 22:32:13 · 92 阅读 · 0 评论 -
算法技巧-队列
队列原创 2022-09-01 00:46:32 · 201 阅读 · 0 评论 -
算法技巧-栈
栈原创 2022-08-31 00:19:40 · 215 阅读 · 0 评论 -
力扣技巧一
1.变量一定要初始化。2.前缀和用于计算区间和。一般用于数组,连续子串。原创 2022-02-05 23:41:26 · 188 阅读 · 0 评论 -
动态规划三
1.树状DP337. 打家劫舍 III/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left,原创 2021-12-11 12:46:05 · 190 阅读 · 0 评论 -
滑动窗口与双指针
1.最长区间模板:int maxLength(int[] A) { int N = A.length; // 区间的左指针 int left = -1; int ans = 0; for (int i = 0; i < N; i++) { // assert 在加入A[i]之前,(left, i-1]是一个合法有效的区间 // step 1. 直接将A[i]加到区间中,形成(left, i] // step 2. 将A[i]加入之后,惰性原创 2021-11-29 23:53:29 · 853 阅读 · 0 评论 -
二分搜索总结
1.模板一:boolean binarySearch(long[] A, long target) { if (A == null || A.length == 0) { return false; } // 首先设定初始区间,这里我们采用开闭原则[l, r) int l = 0, r = A.length; // 循环结束的判断条件是整个区间为空区间,那么运行结束。 // 我们使用的是开闭原则来表示一个区间,所以当l < r的时候 // 我们要查原创 2021-11-22 00:31:08 · 103 阅读 · 0 评论 -
图论总结
拓扑排序拓扑排序的本质是:广度优先遍历 + 贪心算法。拓扑排序是广度优先遍历和贪心算法应用于有向图的专有名词。应用场景:任务调度计划、课程安排。拓扑排序的作用:1.得到一个拓扑序,拓扑序不唯一;2.检测有向图是否有环。(补充:无向图中检测是否有环,使用的数据结构是并查集。)算法流程:1、在开始排序前,扫描对应的存储空间(使用邻接表),将入度为 0的结点放入队列。2、只要队列非空,就从队首取出入度为 0 的结点,将这个结点输出到结果集中,并且将这个结点的所有邻接结点(它指向的结点)的入度减原创 2020-10-14 22:24:56 · 237 阅读 · 0 评论 -
回溯算法总结
解题的步骤是:先画图,再编码。去思考可以剪枝的条件, 为什么有的时候用 used 数组,有的时候设置搜索起点 begin 变量,理解状态变量设计的想法。本序列参考资料1.回溯算法入门级详解 + 练习2.回溯法总结3.回溯算法主要有排列、组合、子集相关问题,Flood Fill,字符串中的回溯问题,游戏问题四大题型。题型一:排列、组合、子集相关问题题目一:全排列(46. 全排列)代码如下:class Solution { public List<List<Integer&原创 2020-09-06 21:32:52 · 441 阅读 · 0 评论 -
[力扣] 动态规划(DP)问题分类汇总(二)
3.区间DP3.1 回文序列回文区间DP模板:for (int i = 0; i < n; i ++) { dp[i][i] = true; res ++; } for (int i = n - 1; i >= 0; i --) { for (int j = i + 1; j < n; j ++) { // 判断s[i] == s[j],dp[i][原创 2020-08-24 09:34:47 · 332 阅读 · 0 评论 -
[力扣] 动态规划(DP)问题分类汇总
动态规划是算法面试的一个重点,在力扣上有很多这类题目,题目是刷不完的,将动态规划的全部类型题目刷一遍可以达到事半功倍的效果。1.线性动态规划1.1 子序列系列:题目一:最长上升子序列(300. 最长上升子序列)题解:注意这里要求的子序列不是连续的,使用动态规划,dp[i]表示的是以下标i的数字作为结尾不连续最长上升子序列的长度,动态转移方程:dp[i] = max{dp[j] + 1, (0 <= j < i,a[j] < a[i]},dp表的初始状态为1,最后统计表中的最大值即为原创 2020-08-11 21:23:04 · 1814 阅读 · 1 评论 -
155. 最小栈
class MinStack { Stack<Integer> data = null; Stack<Integer> helper = null; /** initialize your data structure here. */ public MinStack() { data = new Stack<Inte...原创 2019-11-28 09:10:17 · 92 阅读 · 0 评论 -
33. 搜索旋转排序数组
以二分搜索为基本思路简要来说:nums[0] <= nums[mid](0 - mid不包含旋转)且nums[0] <= target <= nums[mid] 时 high 向前规约;nums[mid] < nums[0](0 - mid包含旋转),target <= nums[mid] < nums[0] 时向前规约(target 在旋转位置到 mi...原创 2019-11-27 11:11:56 · 84 阅读 · 0 评论 -
475. 供暖器
思路题目要求计算供暖器的最小加热半径,即需要计算:距离每间房屋最近的供暖器距离这些距离中的最长距离即为最小加热半径如何获得最近的供暖器?供暖器和房屋都在一条水平线上,因此我们可以对两者进行排序,然后使用二分查找来搜索离房屋最近的供暖器。由二分查找得出的供暖器位置可能存在三种情况:和房子的位置相同:说明可以直接供暖,半径 = 0小于房子的位置:该供暖器在房子的左侧,此时求出的供暖...原创 2019-11-26 15:34:27 · 130 阅读 · 0 评论 -
26. 删除排序数组中的重复项
方法:双指针法算法数组完成排序后,我们可以放置两个指针 ii 和 jj,其中 ii 是慢指针,而 jj 是快指针。只要 nums[i] = nums[j]nums[i]=nums[j],我们就增加 jj 以跳过重复项。当我们遇到 nums[j] \neq nums[i]nums[j] =nums[i] 时,跳过重复项的运行已经结束,因此我们必须把它(nums[j]nums[j]...原创 2019-11-23 15:33:28 · 83 阅读 · 0 评论 -
1. 两数之和
官方题解方法二:两遍哈希表为了对运行时间复杂度进行优化,我们需要一种更有效的方法来检查数组中是否存在目标元素。如果存在,我们需要找出它的索引。保持数组中的每个元素与其索引相互对应的最好方法是什么?哈希表。通过以空间换取速度的方式,我们可以将查找时间从 O(n)O(n) 降低到 O(1)O(1)。哈希表正是为此目的而构建的,它支持以 近似 恒定的时间进行快速查找。我用“近似”来描述,是因为一...原创 2019-11-23 10:20:31 · 81 阅读 · 0 评论