柿子
白泽-默
路尽隐香处,翩然雪海间。
展开
-
和你一起刷算法-一篇搞定千奇百怪的排序算法前篇(十)
来了来了,终于到排序这一章节了(〃'▽'〃)先说各排序内容和模板,然后对比着总结归纳,再到各自的使用场景,东西比较多,本篇幅尽量简略且高效,一篇拿全(*^▽^*)。PS:我之前在bilibili学习排序时感觉很好的视频也摘选出来共大家更直观的理解。0、算法总览学算法绕不过去的肯定是下面这张图了,不用担心,这张图可以用口诀记忆的。排序算法汇总:术语说明:稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后..原创 2020-12-28 19:27:30 · 137 阅读 · 0 评论 -
和你一起刷算法-LeetCode刷题之二分查找训练营(九)
第一题快速导航:154. 寻找旋转排序数组中的最小值 II假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例2:输入: [2,2,2,0,1]输出: 0说明:这道题是寻找旋转排序数组中的最小值的延伸题目。 允许重复会影响算法的时间复杂度吗?会如何影...原创 2020-12-14 11:49:02 · 230 阅读 · 1 评论 -
和你一起刷算法-LeetCode刷题之“居合斩!”二分查找(八)
算法解释:二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取 一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复 杂度为 O(log n)。举例来说,给定一个排好序的数组 {3,4,5,6,7},我们希望查找 4 在不在这个数组内。第一次 折半时考虑中位数 5,因为 5 大于 4, 所以如果 4 存在于这个数组,那么其必定存在于 5 左边这一 半。于是我们的查找区间变成了 {3,4,5}。(注意,根据具体情况和您的刷题习惯,这里的原创 2020-12-12 11:27:21 · 327 阅读 · 1 评论 -
和你一起刷算法-LeetCode刷题之双指针训练营(七)
第一题快速导航:633. 平方数之和给定一个非负整数c,你要判断是否存在两个整数a和b,使得a2+ b2= c。示例 1:输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2:输入:c = 3输出:false示例 3:输入:c = 4输出:true示例 4:输入:c = 1输出:true很明显如果使用双指针的话是需要使用左右指针 left=0 right=c也可以使用数学doubl...原创 2020-12-11 16:43:15 · 257 阅读 · 1 评论 -
和你一起刷算法-LeetCode刷题之玩转双指针的“滑动”(六)
一、柿子前言:说完了双指针中的“左右”指针和“快慢”指针,其中在左右指针中有两种一种是碰撞指针用来解决二分查找问题和N数之和问题,另一种则是今天的主角儿-滑动指针。这也许是双指针技巧的最高境界了,如果掌握了此算法,可以解决一大类子字符串匹配的问题,不过「滑动窗口」算法比上述的这些算法稍微复杂些。幸运的是,这类算法是有框架模板的,下面文章就准备讲解「滑动窗口」算法解题思路,同样怎么能少的了解题模板呢(因为比较懒,模板总结最擅长(o´ω`o)ノ )。二、双指针记忆口诀和模板:链表子串数组题原创 2020-12-11 14:23:01 · 183 阅读 · 0 评论 -
和你一起刷算法-LeetCode刷题之玩转双指针的“快慢”(五)
上篇主要总结分析了双指针中的左右指针,本篇来唠一唠双指针中的另外一种用法,快慢指针。没错就是字面意思,两个指针一个快一些,一个慢一些,那它能解决我们什么问题呢?说类比龟兔赛跑其实并不是很适合,我感觉它更像一个“小孩”在追一个“大人”,两个链表上的指针从同一节点出发,其中一个指针前进速度是另一个指针的两倍。利用快慢指针可以用来解决某些算法问题,比如:一、计算链表的中点:快慢指针从头节点出发,每轮迭代中,快指针向前移动两个节点,慢指针向前移动一个节点,最终当快指针到达终点的时候,慢指..原创 2020-12-10 14:29:46 · 146 阅读 · 0 评论 -
和你一起刷算法-LeetCode刷题之玩转双指针的“左右”(四)
一、算法解释:双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。 若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的 区域即为当前的窗口),经常用于区间搜索。 若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。常见双指针算法分两类用法左右指针 快慢指针内容较多本篇只要对左右指针进行汇总解析,快慢指针请看下一篇。双指针的解题核心是找到如何让两个指针偏移的条件。..原创 2020-12-09 14:03:33 · 170 阅读 · 0 评论 -
和你一起刷算法-LeetCode刷题之贪心算法训练营(三)
学习总结完毕,可以测试一下自己对贪心理解度????眼睛:我看懂了!脑子:我记住了!手:你俩给我滚粗....从基础难度到进阶题目如下:基础难度题目1快速导航:605. 种花问题假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。..原创 2020-12-07 21:25:06 · 246 阅读 · 1 评论 -
和你一起刷算法-LeetCode刷题之“贪心”(二)
上一篇总结了贪心算法分配问题的相关LeetCode题型,本篇针对区间问题相关的题型进行总结。贪心算法-区间问题题目快速导航:435. 无重叠区间解题实现框架:从问题的某一初始解出发; while (能朝给定总目标前进一步) { 利用可行的决策,求出可行解的一个解元素; } 由所有解元素组合成问题的一个可行解;贪心算法的基本思路:建立数学模型来描述问题 把求解的问题分成若干个子问题 对每个子问题求解,得到子问...原创 2020-12-07 09:18:45 · 106 阅读 · 0 评论 -
和你一起刷算法-LeetCode中参数操作方法总结(持续更新...)
在本文中记录一下对各种数据类型的操作方法,随着不断刷题持续更新中...如有错误的地方,请评论区里指正之后会做修改????大厂面试算法,几乎都是手写算法是不带提示的,就算有算法思想解题,还需要知道代码实现嘛。String 一维数组 二维数组 链表 栈 Map 数学 其他一、对String的操作1、获取1.1、获取第i个字符 char str = s.charAt(i);例:str.charAt(0)检索str中的第一个字符,str.charAt(str.lengt原创 2020-12-04 15:22:05 · 356 阅读 · 0 评论 -
和你一起刷算法-LeetCode刷题之“贪心”(一)
五大常用算法:1、递归与分治:直接或者间接不断反复调用自身来达到解决问题的方法。这就要求原始问题可以分解成相同问题的子问题。主要解决的是阶乘、斐波纳契数列、汉诺塔类似问题。2、动态规划:基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。与分治不同在于:适合于用动态原创 2020-12-03 17:17:38 · 286 阅读 · 0 评论 -
算法开篇-大纲
万事开头难,突然发现博客的格式都不大会,汗......后面再优化吧(这句话怎么这么耳熟????)学习算法绕不开的一个网站应该就是LeetCode了,在刷力扣之前,是查过网上一些牛人的刷题心得的,大致总结下应该会有这几种:上来直接顺着题号开刷; 查询热点TOP题型开刷; 有牛人总结题号开刷; 按照算法和数据结构去刷对应题型; 柿子采取的是第四种,根据目前算法和数据结构来刷对应的题型,刷过一种之后进行总结归纳,整理出该种算法的优劣模板,最好最好能把解题模板整理一下。打开 LeetCode 网站原创 2020-12-02 22:50:44 · 141 阅读 · 0 评论