
算法
文章平均质量分 96
算法
rockvine
抬头看天,低头走路
展开
-
最易懂的贪心算法
顾名思义, 贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。举一个最简单的例子:小明和小王喜欢吃苹果,小明可以吃五个,小王可以吃三个。已知苹果园里有吃不完的苹果,求小明和小王一共最多吃多少个苹果。在这个例子中,我们可以选用的贪心策略为,每个人吃自己能吃的最多数量的苹果,这在每个人身上都是局部最优的。又因为全局结果是局部结果的简单求和,且局部结果互不相干,因此局部最优的策略也同样是全局最优的策略。因为饥饿度最小的孩子最容易吃饱,所以我们先考虑这个孩子。为了尽量使原创 2022-06-26 17:49:47 · 532 阅读 · 0 评论 -
玩转双指针
滑动窗口——无重复字符的最长子串遍历循环滑动窗口滑动窗口优化给定一个字符串s,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入:s = “abcabcbb”输出:3解释:因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入:s = “bbbbb”输出:1解释:因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入:s = “pwwkew”输出:3解释:因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案原创 2022-02-09 11:19:45 · 900 阅读 · 0 评论 -
二分查找(折半查找)
二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复 杂度为 O(log n)。举例来说,给定一个排好序的数组 {3, 4, 5, 6, 7},我们希望查找 4 在不在这个数组内。第一次折半时考虑中位数 5,因为 5 大于 4 ,所以如果 4 存在于这个数组,那么其必定存在于 5 左边这一 半。于是我们的查找区间变成了 {3, 4, 5}。(注意,根据具体情况和您的刷题习惯,这里的 5 可以原创 2022-07-03 11:28:08 · 2088 阅读 · 0 评论 -
排序算法总结
快速排序是一种不稳定的排序算法。首先设置三个指针, 指向区间左端, 指向区间右端, 为当前的分界值。从待排序的数据元素中选取一个(通常为第一个)作为基准值元素 ,设置双指针 指向区间左端, 指向区间右端。复杂度分析归并排序是一种稳定的排序算法。当我们要排序这样一个数组的时候,首先将这个数组从中间分成两个子数组,一直递归地把子数组划分成更小的子数组,直到子数组里面只有一个元素。接下来依次按照递归的返回顺序,不断地合并排好序的子数组,直到最后把整个数组的顺序排好。复杂度分析插入排序是一种稳定的排序算法。原创 2022-07-06 21:35:48 · 615 阅读 · 1 评论