自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode算法刷题的第二十八天

今天正式开始动态规划!动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的其实大家也不用死扣动规和贪心的理论区别,后面做做题目自然就知道了。而且很多讲解动态规划的文章都会讲最优子结构啊和重叠子问题啊这些,这些东西都是教科书的上定义,晦涩难懂而且不实用。大家知道动规是由前一个状态推导出来的,而贪心是局部直接选最优的,对于刷题来说就

2025-09-06 19:43:38 931

原创 leetcode算法刷题的第二十七天

贪心算法本身没有什么规律,能写的出来真的很不容易贪心算法的简单题可能往往过于简单甚至感觉不到贪心,但是贪心的难题又真的有点难,而且贪心也没有什么框架和套路,所以对刷题的顺序没有什么要求1.贪心很简单,就是常识?跟着刷题的同学们就会发现,贪心思路往往很巧妙,并不简单2.贪心有没有固定的套路?贪心无套路,也没有框架之类的,需要多看多练培养感觉才能想到贪心的思路。3.究竟什么题目是贪心呢?个人认为:如果找出局部最优并可以推出全局最优,就是贪心,如果局部最优都没找出来,就不是贪心,可能是单纯的模拟。

2025-09-05 18:14:42 865

原创 leetcode算法刷题的第二十六天

此时问题就是要求非交叉区间的最大个数。大家此时会发现如此复杂的一个问题,代码实现却这么简单!

2025-09-04 23:19:33 892

原创 leetcode算法刷题的第二十五天

局部最优可推出全局最优,找不出反例,那就试试贪心。这道题目还是偏难的,需要好好钻研一下。

2025-09-03 19:06:26 1037

原创 leetcode算法刷题的第二十四天

题目链接思路总结:这道题乍一看感觉挺难的,但其实仔细去想的话其实很简单。我们先把题目给的股票价格列出来,然后算出每一天与下一天的价格之差,因为只有当利润为正的时候才可以对我们求出最大利润有帮助,所以我们只需要将所有的利润里面的正数相加就可以了,这样我们就可以求出买卖股票的最大利润,就是局部最优推出全局最优。题目链接思路总结:这道题目我们需要换一个角度来看待问题,不能只局限于跳多少步,这样的话题目会变得非常的困难。这道题目关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳

2025-09-02 22:04:06 1177

原创 leetcode算法刷题的第二十三天

今天是贪心算法。贪心算法其实没有什么规律可言,所以大家了解贪心算法就了解它没有规律的本质就可以了。没有思路就去看题解,要么就是特别简单,要么就是特别难,非常极端。

2025-09-01 21:45:36 1523

原创 leetcode算法刷题的第二十二天

关于回溯算法的理论基础可以看我博客第一篇关于回溯算法的讲解。回溯是递归的副产品,只要有递归就会有回溯,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等。

2025-08-30 14:42:17 1198

原创 leetcode算法刷题的第二十一天

在分割回文串中我列举的分割字符串的难点,这道题基本都覆盖了,而且本题还需要操作字符串添加逗号作为分隔符,并验证区间的合法性,可以说是分割回文串的加强版了,如果大家能把树形结构图画出来的话,应该就能很好的理解题意。如果之前的子集问题和去重问题都可以掌握的好,这道题目可以分分钟AC。求排列问题的时候,就要从0开始,因为集合是有序的,{1, 2} 和{2, 1}是两个集合,排列问题我们后续的博客就会讲到的。其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。

2025-08-29 16:08:55 716

原创 leetcode算法刷题的第二十天

一些同学可能遇到题目比较难,但是不知道题目难在哪里,反正就是很难。其实这样还是思维不够清晰,这种总结的能力需要多接触多锻炼。

2025-08-28 22:38:41 1489

原创 leetcode算法刷题的第十九天

今天是回溯算法。

2025-08-27 15:17:27 604

原创 leetcode算法刷题的第十八天

二叉树的种类,存储方式,遍历方式,定义方式。这些在我第一篇二叉树的博客里面有具体的介绍。在二叉树题目选择什么遍历顺序是不少同学头疼的事情涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。注意在普通二叉树的属性中,我用的是一般为后序,例如单纯求深度就用前序。

2025-08-26 16:46:37 579

原创 leetcode算法刷题的第十七天

思路总结:相比于二叉树的最近公共祖先,二叉搜索树的最近公共祖先还是更加简单的,究其原因就是二叉搜索树的特性,当然我们看到二叉搜索树的时候,脑子也要想到中序遍历,这样我们所组成的数组就是有序的,这样对我们的操作更加的方便。因为二叉搜索树的性质,当两个节点的值的大小都比根节点小的话,那说明最近公共祖先肯定是在左子树中,反之就在右子树中。最后依然给出了迭代的方法,迭代的方法就需要记录当前遍历节点的父节点了,这个和没有返回值的递归函数实现的代码逻辑是一样的。利用其有序性,迭代的方式还是比较简单的。

2025-08-25 15:42:33 422

原创 leetcode算法刷题的第十六天

思路总结:其实这道题本身不难,主要的难点可能就是要想到二叉搜索树的性质,有什么特点,如果能想到这一点,这道题就迎刃而解了,所以,我们看到二叉搜索树的题目的时候,一定要想到中序遍历,这样可能会有一些思路。思路总结:遇到在二叉搜索树上求什么最值,求差值之类的,都要思考一下二叉搜索树可是有序的,要利用好这一特点。在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。理解递归的解法就够了。

2025-08-23 15:47:41 818

原创 leetcode算法刷题的第十五天

这道题其实又是一个构造二叉树的问题,但是这道题比昨天做的题要简单一点。凡是构造二叉树的题目,我们都是要用到前序遍历的方法。我们写功能函数的时候一定是要返回根节点的。思路总结:首先要确定构造二叉树肯定是要用到前序遍历的,其次就是要知道前序遍历的顺序,还有就是因为考虑到区间的问题,所以在设定区间的时候一定要统一,不然的话容易出错。

2025-08-22 18:08:12 1089

原创 leetcode算法刷题的第十四天

找到。

2025-08-21 17:01:08 748

原创 leetcode算法刷题的第十三天

因为二叉树的内容比较多,所以今天还是二叉树。

2025-08-20 16:58:37 844

原创 leetcode算法刷题的第十二天

思路总结:只要前面的深度优先搜索和广度优先搜索的题目以及迭代法的题目学会了,这个题目不难,关键在于要多进行一个节点处理操作。这里可以记住一点,深度优先搜索用的是栈,而广度优先搜索用的是队列,这样开始做题的时候会有一点思路,否则容易第一步就错了。比较的是两个子树的里侧和外侧的元素是否相等。本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。思路总结:这道题也是在上一篇博客有具体思路,这道题也是多了一个递归法,可以优先掌握递归法,再掌握迭代法。

2025-08-19 20:57:48 421

原创 leetcode算法刷题的第十一天

int data;// 左子树// 右子树} Node;

2025-08-18 18:12:16 1066

原创 leetcode 算法刷题的第十天

1.一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素除外)重新添加到队列尾部,此时,再弹出元素就是栈的顺序了。2.递归的实现是栈:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。3.括号匹配是使用栈解决的经典问题。建议写代码之前要分析好哪几种不匹配的情况,如果不动手之前分析好,写出的代码也会有很多问题。

2025-08-17 15:16:02 339

原创 leetcode算法刷题的第九天

今天是栈与队列。

2025-08-15 17:12:34 883

原创 leetcode算法刷题的第八天

1.什么是字符串?字符串是若干字符组成的有限序列,也可以理解为是一个字符数组。2.在C++中,提供一个string类,string类会提供 size接口,可以用来判断string类字符串是否结束,就不用'\0'来判断是否结束。3.vector<char> 和string有什么区别吗?其实没什么区别,但是string提供更多的字符串处理的相关接口,而vector却没有。所以,我们平时写字符串相关的题目时候,直接定义一个string更方便一些。

2025-08-14 21:20:57 976

原创 leetcode算法刷题的第七天

这道题考察的就是对一个字符串如何进行反转操作。这个功能函数是void,所以不用返回值。

2025-08-13 14:27:11 380

原创 leetcode算法刷题的第六天

一般来说哈希表都是用来快速判断一个元素是否出现在集合里面。哈希函数是把传入的key值映射到符号表的索引上。哈希碰撞处理多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。常见的哈希结构:数组、set(集合)、map(映射)

2025-08-12 16:23:53 280

原创 leetcode算法刷题的第五天

今天我们主要学习的是哈希表。一听到这个名字,可能很多新手会感到这个东西很高级,但是等你看完这篇文章你会对哈希表祛魅,其实没什么难的。

2025-08-11 17:28:38 622

原创 leetcode 算法刷题的第四天以及链表总结

第一,什么时候使用虚拟头节点以及为什么要用虚拟头节点?链表的一大问题就是操作当前节点必须要找到前一个节点才能操作,这就造成了头节点的尴尬,因为头节点没有前一个节点,所以我们就要对头节点单独处理,而使用虚拟头节点的方法就可以完美地解决这个问题。至于什么时候使用头节点,就看博主的上一篇博客,里面有详细的讲解。第二,链表的理论基础总结链表的种类主要为:单链表,双链表,循环链表链表的存储方式:链表的节点在内存中是分散存储的,通过指针连在一起。链表是如何进行增删改查的。数组和链表在不同场景下的性能分析。

2025-08-09 18:02:22 463

原创 leetcode 算法刷题的第三天

具体怎么定义,大家可以上网搜索一下。我这里就用C语言来举例吧。(主播的实力有限)int val;} ListNode;

2025-08-08 17:51:06 652

原创 leetcode 算法刷题的第二天以及对于数组内容的总结

首先,数组是存放在连续内存空间上的相同类型数据的集合。(这个应该都知道)并且数组的下标是从0开始的,并且内存地址也是连续的。其次,数组中的元素是不能删除的,只能覆盖。还有,在 C/C++ 中,二维数组的内存地址是连续的静态二维数组(如):内存完全连续,按行优先存储。动态分配的指针数组(如int**a):内存通常不连续,每行是独立的一维数组。如果需要确保动态分配的二维数组内存连续,可以手动分配一块大的一维数组,再通过指针计算模拟二维访问(但语法上不如静态数组直观)。

2025-08-07 14:43:11 907

原创 leetcode 算法刷题的第一天

题目描述:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果target存在返回下标,否则返回-1。

2025-08-06 14:21:47 417

空空如也

空空如也

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

TA关注的人

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