![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
学习经典算法
涵sue
这个作者很懒,什么都没留下…
展开
-
LeetCode207 -- 课程表 -- 拓扑排序
题目描述你这个学期必须选修numCourse门课程,记为0到numCourse-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释:总共有 2 门课程。学...原创 2020-04-29 12:31:24 · 143 阅读 · 0 评论 -
算法 -- 滑动窗口思想
滑动窗口就是在一个数组上设置一个left指针和right指针。整体框架如下,问题的关键 缩小窗口的时机int left = 0;int right = 0;while (right < s.length()) {` // 增大窗口 window.add(s[right]); right++; while (window 满足一...原创 2020-04-26 14:35:03 · 227 阅读 · 0 评论 -
LeetCode72 -- 编辑距离 动态规划
题目描述给你两个单词word1 和word2,请你计算出将word1转换成word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -&g...原创 2020-04-25 12:57:34 · 109 阅读 · 0 评论 -
LeetCode4 -- 寻找两个有序数组的中位数 变态的二分
题目描述给定两个大小为 m 和 n 的有序数组nums1和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, ...原创 2020-04-25 11:16:09 · 96 阅读 · 0 评论 -
LeetCode287 -- 寻找重复数 二分法
题目描述给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小...原创 2020-04-05 21:18:50 · 152 阅读 · 0 评论 -
LeetCode33 -- 搜索旋转排序数组 二分法
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6...原创 2020-04-05 20:31:39 · 74 阅读 · 0 评论 -
排序 -- 归并
时间复杂度 O(nlogn)package sort;import java.util.Arrays;public class MyMergeSort { public void sort(int[] arr) { int len = arr.length; mergeSort(arr, 0, len - 1); } ...原创 2020-03-24 15:09:34 · 61 阅读 · 0 评论 -
贪心算法
定义贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。最优子结构当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。...原创 2020-02-20 13:04:46 · 107 阅读 · 0 评论