代码编织梦想

和你一起刷算法-一篇搞定千奇百怪的排序算法前篇(十)-爱代码爱编程

来了来了,终于到排序这一章节了(〃'▽'〃) 先说各排序内容和模板,然后对比着总结归纳,再到各自的使用场景,东西比较多,本篇幅尽量简略且高效,一篇拿全(*^▽^*)。 PS:我之前在bilibili学习排序时感觉很好的视频也摘选出来共大家更直观的理解。有些视频很好玩儿     0、算法总览 学算法绕不过去的肯定是下面这张图了,不用担心,这张图可

和你一起刷算法-LeetCode刷题之二分查找训练营(九)-爱代码爱编程

第一题快速导航:154. 寻找旋转排序数组中的最小值 II 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。 示例 1: 输入: [1,3,5] 输出: 1 示

和你一起刷算法-LeetCode刷题之“居合斩!”二分查找(八)-爱代码爱编程

算法解释: 二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取 一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复 杂度为 O(log n)。 举例来说,给定一个排好序的数组 {3,4,5,6,7},我们希望查找 4 在不在这个数组内。第一次 折半时考虑中位数 5,因为 5 大于 4

和你一起刷算法-LeetCode刷题之双指针训练营(七)-爱代码爱编程

第一题快速导航:633. 平方数之和 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。 示例 1: 输入:c = 5 输出:true 解释:1 * 1 + 2 * 2 = 5 示例 2: 输入:c = 3 输出:false 示例 3: 输入:c = 4 输出

和你一起刷算法-LeetCode刷题之玩转双指针的“滑动”(六)-爱代码爱编程

一、柿子前言: 说完了双指针中的“左右”指针和“快慢”指针,其中在左右指针中有两种一种是碰撞指针用来解决二分查找问题和N数之和问题,另一种则是今天的主角儿-滑动指针。 这也许是双指针技巧的最高境界了,如果掌握了此算法,可以解决一大类子字符串匹配的问题,不过「滑动窗口」算法比上述的这些算法稍微复杂些。 幸运的是,这类算法是有框架模板的,下面文章就准备讲

和你一起刷算法-LeetCode刷题之玩转双指针的“快慢”(五)-爱代码爱编程

上篇主要总结分析了双指针中的左右指针,本篇来唠一唠双指针中的另外一种用法,快慢指针。 没错就是字面意思,两个指针一个快一些,一个慢一些,那它能解决我们什么问题呢?   说类比龟兔赛跑其实并不是很适合,环问题可以理解为小学数学的追及问题,如果跑道是环形的,那么两个运动员一快一慢,跑的快的总会在某一个点追上跑的慢的,同样走的快的指针在存在环的链表上总会有

和你一起刷算法-LeetCode刷题之玩转双指针的“左右”(四)-爱代码爱编程

一、算法解释: 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的 区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。常见双指针算法分两类用法 左

和你一起刷算法-LeetCode刷题之贪心算法训练营(三)-爱代码爱编程

学习总结完毕,可以测试一下自己对贪心理解度🤗 从基础难度到进阶题目如下: 基础难度 题目1快速导航:605. 种花问题 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。

和你一起刷算法-LeetCode刷题之“贪心”(二)-爱代码爱编程

上一篇总结了贪心算法分配问题的相关LeetCode题型,本篇针对区间问题相关的题型进行总结。   贪心算法-区间问题 题目快速导航:435. 无重叠区间 解题实现框架: 从问题的某一初始解出发;     while (能朝给定总目标前进一步)     {            利用可行的决策,求出可行解的一个解元素;    

和你一起刷算法-LeetCode中参数操作方法总结(持续更新...)-爱代码爱编程

在本文中记录一下对各种数据类型的操作方法,随着不断刷题持续更新中... 如有错误的地方,请评论区里指正之后会做修改🤗 大厂面试算法,几乎都是手写算法是不带提示的,就算有算法思想解题,还需要知道代码实现嘛。 String 一维数组二维数组链表栈Map数学其他一、对String的操作 1、获取 1.1、获取第i个字符 char str

和你一起刷算法-LeetCode刷题之“贪心”(一)-爱代码爱编程

五大常用算法: 1、递归与分治:直接或者间接不断反复调用自身来达到解决问题的方法。这就要求原始问题可以分解成相同问题的子问题。主要解决的是阶乘、斐波纳契数列、汉诺塔类似问题。 2、动态规划:基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各

算法开篇-大纲-爱代码爱编程

最近一直在刷算法题,算法平时工作用的很少那为啥子要刷嘞? 算法是后端职级进阶程序猿必备之技能,跟框架学习是在不同维度,也无关联,但是如果你只会使用Arrays.sort(list),除非你是个刚入行的应届,不然以后你会慢慢发现这个圈子与我格格不入,怨念极深o(╥﹏╥)o; 另一个因素是因为想进大厂😂,算法必考,基本上分值在40分,这两个理由够充分的了吧