自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 算法通关村--盘点面试大热门之区间问题

当总油量 大于等于 消耗量时,应该可以跑完一圈,在每一段时,各个加油站的剩油量相加一定是大于等于0的,每个加油站的剩余量 = 加油量 - 耗油量,i从0开始累加,一旦和小于0,说明[0,i]区间不能作为起始位置,必须从 i + 1开始。输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]你从其中的一个加油站出发,开始时油箱为空。解释:新区间[4,8] 与[3,5],[6,7],[8,10]重叠,因此合并成为[3,10]

2023-09-13 00:12:49 100

原创 算法通关村--原来贪心如此简单

第4位顾客那里,我们收取一张10美元的钞票,并返还5美元。而且贪心的题目没有固定的套路,一题一样,好在大部分贪心算法的题都不是特别难,因此贪心的学习方法就是“直接做题,不考虑贪不贪心”。解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。在柠檬水摊上,每一杯柠檬水的售价为5美元,顾客排队购买你的产品,(按账单bills支付的顺序)一次购买一杯。当收取10美元时,需要找零5美元,如果没有5美元面值的钞票,则无法正确找零。

2023-09-10 23:38:29 109

原创 算法通关村--滑动窗口高频问题

学习了滑动窗口,用几道滑动窗口经典问题,加深一下滑动窗口的学习。

2023-09-09 00:13:50 118

原创 算法通关村--原来滑动窗口如此简单

滑动窗口实际上就是双指针的一种特殊场景,由于这类方式能很好的解决一些特定场景的问题,所以就有了“滑动窗口思想”。

2023-09-06 00:51:21 99

原创 算法通关村--解析堆在数组中找第K大的元素的应用

学习了堆,那么又该如何用堆解决问题呢?之前在快排的学习中,使用递归+快排解决了在数组中找第K大的元素,现在,试着用堆来解决。

2023-09-02 23:12:49 35

原创 算法通关村--原来这就是堆

堆结构是一种非常重要的基础数据结构,也是算法中重要的内容。

2023-09-01 20:52:24 49

原创 算法通关村--数组实现加法问题解析

给定一个整数,写一个函数来判断它是否是3的幂次方,如果是,返回true;给你一个整数n,请你判断该整数是否是2的幂次方。给定一个有整数组成的非空数组所表示的非负整数,在该数的基础上加一。如果存在一个整数x使得 n == 2^x,则认为n是2的幂次方。整数n是3的幂次方需满足:存在整数x使得n == 3^x。输入:a = ”1010“,b = ”1011“输入:digits = [4,3,2,1]输入:digits = [1,2,3]输入:a = “11”,b = ”1“输出:[4,3,2,2]

2023-08-30 23:18:48 65

原创 算法通关村--溢出问题处理模板

溢出是一个非常重要的问题,只要涉及到数字,都有可能遇到。用几个例题,来处理溢出。

2023-08-28 23:06:06 36

原创 算法通关村--反转问题解析

这一节,我们研究一下字符串的反转的相关问题。

2023-08-27 23:55:55 44

原创 算法通关村--不简单的字符串转换问题

字符串本身不是一种数据结构,但由于本身的特殊性,可以产生一些特定的算法题。在链表、数组等结构中,元素之间没有语义的关联,但是字符串不同,几个字母组合在一起就是一个单词。字符串可以存放字母、数字、特殊字符等。

2023-08-24 22:29:41 59

原创 算法通关村--位移的加减乘除

在计算机中,位运算的效率比乘除效率更高,因此在高性能软件的源码中大量应用,并且计算机中各种运算本质上都是位运算。

2023-08-21 23:30:37 84

原创 算法通关村--位运算常用技巧

位运算是计算机的核心基础,数据的表示和计算几乎都少不了。所以我们深入学习下位运算。

2023-08-20 23:07:38 146

原创 算法通关村--数组中第K大的数字

请注意,你需要找的是数组排序后,第k个最大的元素,而不是第k个不同的元素。给定整数数组nums和整数k,请返回数组中第k个最大的元素。输入:[3,2,3,1,2,4,5,5,6], k = 4。输入:[3,2,1,5,6,4], k = 2。学习了快速排序,用例题来加深对快排的理解。先对数组进行排序,然后去找第k个数。

2023-08-14 22:47:04 34

原创 算法通关村--快速排序

快速排序,有称划分交换排序。通过一趟排序将待排记录分隔成两个独立部分,其中记录的一部分关键字比另一部分的关键字小,则可分别对这两部分继续排序,以达到整个序列有序。2.重新排序数列,将比基准小的元素摆在基准前面,比基准大的元素摆在基准后面。1.从数列中选择一个元素,作为“基准”(pivot)以{26,53,48,15,13,46,32,15}3.递归排列比基准小的子序列和比基准大的子序列。

2023-08-13 00:12:31 57

原创 算法通关村--二分查找在搜索中的应用

基于二分查找,可以拓展出许多算法问题。在前面的学习中,我们可以发现许多题使用前序、后序或者层次遍历都可以解决,但几乎没有中序遍历的,这是因为前后序遍历与中序有不一样的特征,中序遍历可以和搜索树结合在一起,而前后序不行。下面我们来研究一下中序搜索的问题。

2023-08-09 23:32:21 43

原创 算法通关村--透彻理解二分查找

常见的查找算法有顺序查找、插值查找、斐波那契查找、树表查找、分块查找、哈希查找等等。其中二分查找、插值查找一级斐波那契查找可以分为一类——插值查找。而插值查找和斐波那契查找实在二分查找的基础上的优化查找算法。今天,我们就来详细了解一下二分查找。凡是涉及到在排好序的地方查找都可以用二分来优化查找效率。二分查找就是将中间结果与目标进行比较,一次去掉一半。可以使用循环或者递归来实现二分查找。

2023-08-07 22:42:06 133

原创 算法通关村--轻松搞定最小深度

最小深度从根节点到最近叶子节点的最短路径上的节点数量,也就是最小深度的一层必须要有叶子节点。输入:root = [2,null,3,null,4,null,5,null,6]输入:root = [3,9,20,null,null,15,7]如果左子树为空,右子树不为空,说明最小深度为1+右子树的深度。如果右子树为空,左子树不为空,说明最小深度为1+左子树的深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。如果左右子树都不为空,返回左右子树深度最小值+1。给定一个二叉树,找出其最小深度。

2023-08-06 23:00:40 53

原创 算法通关村--轻松搞定合并二叉树

在解决二叉树问题的过程中,也可以使用双指针解决问题。

2023-08-05 23:32:34 71

原创 算法通关村--原来如此简单

广度优先遍历又叫层次遍历。层次优先遍历就是从根结点开始,先访问根节点下面一层全部元素,在访问之后的层次。整个过程可以用队列来实现,首先根节点入队,然后根节点出队,接着把根节点的左右孩子节点依次入队保存到队列中,接着出队一个元素,在把这个元素的左右孩子保存入队,依次类推,最后将所有节点出队,这就是整个层次遍历的过程。接下来,用题来深入理解层次遍历。

2023-08-02 23:46:47 123

原创 算法通关村--如何使用中序和后序来恢复一颗二叉树

二叉树的性质和链表本质相似,比链表多了一个指针,如果是二叉树,只需要在链表的定义上增加一个指针。int val;如果是N叉树,又该怎么去定义呢?就是将节点指向一个List就行。int val;

2023-08-02 00:21:12 81

原创 算法通关村--n数之和问题解析

先将数组排序,固定最左边的指针first,双指针second,third分别设在数组(first+1,nums.length-1)两端,通过双指针交替向中间移动,记录nums[first] + nums[second] +nums[third] = 0 时的nums组合。先遍历,轮到2,然后用9 - 2 = 7,在哈希表里找,显然,哈希表中没有找到7,就把当前的数字2和索引以键值对形式存入到哈希表中,然后遍历7,用 9 - 7 = 2,在表找,可以找到数字2 ,返回即可。输入:nums = [0,1,1]

2023-07-31 23:41:41 26

原创 算法通关村--Hash问题解析

存放7时,由于模除取余为0,这时位置为空,可以直接存入,存放8时,取余为1,这时位置已满,所以向后寻找,直到走到索引为3时,位置为空,所以将8存放到3中,同理9存放到索引为6的位置。在上面的例子中,可以发现Hash中很多位置可能要存放两个或者多个元素,这时,使用单纯的数组行不通,这种两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。开放定址法就是一旦发生冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。若要继续存放7,8,9时,又该怎么做呢?

2023-07-30 23:25:28 58

原创 算法通关村--括号匹配问题解析

首先将所有的符号存到哈希表中,左半边做key,右半边做value。遍历字符串,如果遇到左半边符号就入栈,遇到右半边符号就与栈顶的符号比较,若不匹配则返回false,否则返回true。给定一个只括号‘(’,‘)’,‘{’,‘}’,‘[’,‘]’,的字符串s,判断字符串是否有效。3.每个右括号都有一个对应的相同类型的左括号。1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。初步学习了栈,现在用一道题去深入理解栈。我们来研究一个经典的问题--括号匹配。输入:s=“(){}[]”

2023-07-28 23:11:22 82

原创 算法通关村--如何基于链表实现栈

前面学习了数组,接下来来研究数据结构中非常重要的一部分——栈。

2023-07-28 00:43:29 73

原创 算法通关村--双指针的妙用

前面学习了数组基本操作,今天学习双指针在数组中的应用。所谓的双指针其实就是两个变量,不是真的指针。首先定义两个指针slow、fast。其中slow表示当前位置之前的元素都是不重复的,fast指针一直向后找,直到找到与slow位置不一样的,找到后就将slow向后移动一个位置,并将arr[fast]赋值给arr[slow],之后,之后fast继续向后找,循环执行,找完后,slow之前的元素就是单一的,这样就大大简化了数组去重的流程。了解了双指针后,将双指针应用到实际中。

2023-07-27 00:13:36 39

原创 算法通关村--不简单的数组增删改查

例如{1,2,3,4,5,0,0},删除4后变为{1,2,3,5,1.不同语言,初始化数组不同,c语言每个位置都是一个随机数,java中,默认为0,python可以直接指定。用索引来标识每项数据在数组中的位置,通常索引从0开始,可以根据索引快速访问数组中的元素。增加元素时,首先找到要加元素的位置,然后将其后面元素整体右移,最后将其插入到位置上。,0,0},因为元素的数量用size来记录,所以最后一个元素不会访问到。删除元素时,首先要判断要删除的元素是否在数组中,然后再进行删除。2.创建时直接进行初始化。

2023-07-25 23:54:27 57

原创 算法通关村第二关--指定区间反转问题解析

上回了解了链表的反转,接下来深入了解下链表指定区间的反转。指定区间反转比链表的反转稍微难一点,但也差不多,这里采用2种方法解决,1.头插法 2.穿针引线法。

2023-07-24 01:27:10 57

原创 算法通关村第二关--终于学会链表反转了

链表的反转可以分为两种:1.带头节点 2.不带头节点。

2023-07-21 23:35:09 120

原创 算法通关村第一关—链表经典问题之合并两个有序链表笔记

解题:判断两个链表listA,listB都不为空时,比较listA,listB哪个链表节点的值更小,将较小的值放入到新的链表中,然后将对应的节点向后移一位。若listA,listB有相同的节点,先接listA的节点,再接listB的节点,若listA为空时,直接将listB的节点连接到新链表;将两个排列有序的链表合并成一个链表有两种方式:1.创建一个新的链表,比较两个链表,按照从小到大(从大到小)的顺序,将节点依次放入到新链表中;2.将一个链表的节点拆下来 ,按照顺序插入到另一个链表中。

2023-07-17 11:39:37 42

原创 算法通关村第一关--链表青铜挑战笔记

链表是一种链式存储的数据结构,链表节点结构为:链表的结构为:其中data用来存放数据,next存放指向下一个数据的地址。构建一个单链表单链表构建有两种方法:1.头插法;2.尾插法。头插法:数据插入到链表的表头。尾插法:数据插入带链尾。

2023-07-16 17:16:37 482

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除