自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Win32程序与MFC程序构建顺序梳理

使用者按下系统菜单中的Close命令 -> 系统送出WM_CLOSE消息 -> DefWindowProc处理调用DestroyWindow -> Destroy Window送出WM_DESTROY消息 -> 程序对WM_DESTROY的标准反应是调用PostQuitMessage送出WM_QUIT消息 -> 消息循环中的GetMessage取得,如步骤2,结束消息循环.WM_QUIT是特定的消息类型,当接收到这个消息时,GetMessage会返回0并结束while循环,进而结束整个程序。

2023-12-18 10:58:43 116 1

原创 QT信号槽实现原理

在宏中声明了几个重要的成员变量及成员函数,包括声明了一个只读的静态成员变量static MetaObject,以及3个public的成员函数还有一个private的静态成员函数qt_static_metacall();

2023-09-21 10:01:16 461 1

原创 整数拆分、不同的二叉搜索树-代码随想录

4.确定遍历顺寻---------dp[i] 是依靠 dp[i - j]的状态,所以遍历i一定是从前向后遍历。5.打印dp数组。

2023-03-27 23:27:41 438

原创 不同路径1、2-代码随想录

递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么。递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。这样就可以保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值的。

2023-03-25 13:13:44 275

原创 509. 斐波那契数、爬楼梯、使用最小的力气爬楼梯-代码随想录

动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。

2023-03-24 22:02:42 446

原创 单点递增的数字、监控二叉树-代码随想录

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x

2023-03-23 17:19:38 166

原创 无重叠区间、合并区间、划分字母区间

我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。2.从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点。注意: 可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。思路:跟最少箭射穿气球一样,本质上都是寻找重叠区间的问题。给出一个区间的集合,请合并所有重叠的区间。

2023-03-22 19:51:44 265

原创 柠檬水找零、根据身高重拍数组、用最少的箭引爆气球-代码随想录

在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。给你一个数组 points ,其中 points [i] = [xstart,xend] ,返回引爆所有气球所必须射出的最小弓箭数。

2023-03-21 17:59:54 46

原创 K次取反后最大化的数组和、加油站、分发糖果-代码随想录

力扣题目链接(opens new window)给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方式修改数组后,返回数组可能的最大和。示例 1:思路:思考贪心算法一定要明确什么是局部最优,什么是全局最优,且举不出反例。本题的局部最优分为两部分:1.若题目中存在负数,优先对绝对值大的负数取反;2.若题目中全为正值,且k不为零,则对绝对值最小的值取反。全局最优为:数组可能的最大值

2023-03-20 23:24:43 62

原创 买卖股票的最佳时机2、跳跃游戏1、2-代码随想录

思路:从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最小步数!(与上题的不同即为需要找到下一步的最大覆盖范围。给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。你的目标是使用最少的跳跃次数到达数组的最后一个位置。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。

2023-03-19 13:18:03 34

原创 分发饼干、摆动序列、最大子序列和

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。。

2023-03-19 00:09:50 191

原创 递增字符串、全排列12-代码随想录

给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。思路:按照本题要求需要去重,且子序列要求是递增的,因此不能用之前子集2中使用的先给数组排序,然后再用used数组是否为1判断使用情况。因为排序会打乱之前数组的顺序,不能准确找出递增字符串。递归三部曲:1.确定参数和返回值2.终止条件可以不加终止条件,startIndex每次都会加1,并不会无限递归。3.单层递归。

2023-03-18 23:23:57 304

原创 子集问题1、2-代码随想录

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]核心:对比切割问题和组合问题,思路:回溯三部曲:1.确定参数与返回值2.终止条件。3.单层递归遍历。

2023-03-16 17:17:34 55

原创 93.复原IP地址-代码随想录

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "[email protected]" 是 无效的 IP 地址。核心:1.与分割字符串一样思路:递归三部曲:1.确定参数与返回值2.终止条件。

2023-03-16 16:24:48 93

原创 分割回文串-代码随想录

示例: 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。难点:1.切割问题,类似于组合问题,但需要重点考虑分隔符的落脚点。返回 s 所有可能的分割方案。该问题为回溯法解决的分割问题。1.递归参数与返回值。

2023-03-16 16:02:16 104

原创 组合总和12-代码随想录

思路:递归三部曲:1.确定参数及返回值。

2023-03-15 01:52:11 679

原创 电话号码的字母组合-代码随想录

这点要和组合题目中的startindex区分开,因此startindex是为了在同一个数组中避免相同元素。终止条件就是如果index 等于 输入的数字个数(digits.size)说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。1.确定回溯(递归)参数及返回值。这两个变量我依然定义为全局。2.确定递归终止条件。3.确定单层遍历逻辑。

2023-03-11 23:02:00 86

原创 组合总和3、电话号码的字母组合-代码随想录

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]]示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]思路:1.题目要求为组合k个数总和,且组合中只有1-9,因此在回溯的树型结构中,k为递归深度,9为for循环的横向树杈,n为递归结束的条件。2.回溯三部曲1.确定递归返回值及参数result为二维数组;

2023-03-11 21:43:01 86

原创 回溯算法理论基础及组合问题-代码随想录

回溯搜索法也是一种暴力的穷举可能的解法。,总之是一个for循环+递归。3.根据回溯法的本质,可以将其理解为一个树形结构。如下图所示。可以看出回溯最终要返回的值(也就是我们要找的值),就是多叉树的叶子节点。

2023-03-10 22:25:03 80

原创 翻转二叉树-对称二叉树-代码随想录

1.参数返回值:目中给出的要返回root节点的指针,可以直接使用题目定义好的函数,所以就函数的返回类型为。思路:1.翻转的本质是交换每个节点的左右孩子,因此中序遍历解题是最复杂的。思路:比较二叉树是否对称,本质是对比根节点的两棵子树。2.终止条件:当前节点为空的时候,就返回。,因此返回值是bool,参数是左右子树;此时就只剩左右节点不为空且相等的情况。3.递归逻辑:因为是先前序遍历,

2023-03-03 19:55:19 50

原创 二叉树的层序遍历-代码随想录

2.层序遍历的本质类似于图论中的广度优先遍历,运用过程为我们把每层的孩子节点推进队列,同时按照记录的每层的节点size弹出元素。Cpp代码中size为que.size的快照,在while循环中。que.size的大小是不断变化的。给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。思路:1.解题要求要一层一层的遍历二叉树。因此考虑用队列先进先出的特性,来呈现遍历的层次。

2023-03-03 17:46:57 114

原创 二叉树的递归迭代遍历-代码随想录

写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

2023-03-02 16:56:04 75

原创 347.前 K 个高频元素-代码随想录

3.如果使用大顶堆,弹出的为最大元素,无法保留前k个元素。同时大顶堆要对所有元素排序。2.优先级序列的本质是一个堆,为无序,底层为哈希表(知识点与两数之和重合;注意:1.同时元素频率,

2023-03-02 15:45:42 79

原创 滑动窗口的最大值-代码随想录

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。随着窗口的移动,队列的元素随着进出,同时找到每次窗口队列中最大的元素。2、那么问题就转化为如何在每次滑动后,

2023-03-02 15:20:14 60

原创 二叉树理论基础-代码随想录

所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_set底层实现是哈希表。这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。若最底层为第 h 层,则该层包含 1~ 2^(h-1) 个节点。除了最底层节点可能没填满外,其余每层节点数都达到最大值,

2023-03-01 21:33:13 55

原创 栈的应用-代码随想录

该思路一共分为三种情况:第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false(左括号多余)第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false(括号不匹配)第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false(右括号多余)

2023-02-25 18:15:01 131

原创 栈和队列的相互实现-代码随想录

思路1:类似于上题中实现队列的操作,建立两个队列。push(x) -- 将一个元素放入队列的尾部。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。pop() -- 从队列首部移除元素。思路2:用一个队列实现栈的操作,即。

2023-02-24 15:19:16 52

原创 题目:剑指Offer58-II.左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。输入: s = "lrloseumgh", k = 6。输入: s = "abcdefg", k = 2。输出: "umghlrlose"输出: "cdefgab"

2023-02-23 22:49:04 25

原创 151.翻转字符串里的单词-代码随想录

解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。给定一个字符串,逐个翻转字符串中的每个单词。输入: " hello world!输入: "a good example"输入: "the sky is blue"输出: "blue is sky the"输出: "example good a"输出: "world!

2023-02-23 21:59:05 34

原创 剑指Offer 05.替换空格-代码随想录

1.首先对字符串进行遍历,并将空格的个数记为count;同时将数组的空间扩容为s.size+2*count;如果前指针为空格,则后指针输入空格替换元素:"%20"如果前指针为元素,则直接复制到后指针;请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1: 输入:s = "We are happy."输出:"We%20are%20happy."思路:使用双指针法,

2023-02-23 21:14:09 53

原创 反转字符串1-2-代码随想录

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。编写一个函数,其作用是将输入的字符串反转过来。思路:运用双指针法,指向首尾两端元素互换之后,控制两个指针往中间移动。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]

2023-02-23 20:36:16 35

原创 三数之和-四数之和-代码随想录

2.每次指针i移动前都用left和right指针进行一次遍历,三个指针元素之和>0时,移动right指针向左,三个指针元素之和

2023-02-22 20:03:40 89

原创 赎金信-代码随想录

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。2、 然后将第二个单词t里的字符通过计算逐一减去刚求出哈希数组里的结果,根据结果是否为0验证s与t是否字母全等。注意:在数据体量和方差都已知且很小的情况下,优先考虑用数组这种数据结构解题,会大大节省空间及运行内存。),逐一放在一个哈希数组里记录结果。

2023-02-22 18:47:54 53

原创 第454题.四数相加II-代码随想录

给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。3.遍历 CD两个数组并求和,判断是否有满足0-(c+d)的值在map中出现,如果出现,将其value的值存放在新建的int型整数count里;2.遍历 AB两个数组并求出a+b的所有和的值,并将值和出现的次数,存在新建的map中分别作为key和value;4.返回count的值。思路:1.将AB和CD两两分开;

2023-02-22 14:33:17 31

原创 第202题. 快乐数-代码随想录

快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。思路:这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。如果 n 是快乐数就返回 True;不是,则返回 False。判断sum是否重复出现就可以使用unordered_set。

2023-02-21 02:13:01 113 1

原创 两数之和-代码随想录

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。思考:1.本题解题过程中,在遍历数组的时候,去询问这个集合中,另一个元素是否在集合中出现过,也就是。2.如果没找到匹配对,就把访问过的元素和下标加入到map中。给定 nums = [2, 7, 11, 15], target = 9。因为 nums[0] + nums[1] = 2 + 7 = 9。思路:1.遍历当前元素,并在map中寻找是否有匹配的key。所以返回 [0, 1]

2023-02-21 02:05:09 55

原创 两个数组的交集-代码随想录

思路:这道题由于题目中并没有说明数组的大小和反差,因此考虑用哈希表中unordered_set;然后将数组2并与刚刚建立的无序set对比找到相同的元素;将相同元素放在建立的result_set;给定两个数组,编写一个函数来计算它们的交集。解题:首先建立一个无序的set放入数组1;

2023-02-21 00:52:07 83

原创 有效的字母异位词+哈希表基础-代码随想录

这里的set和map在哈希表解决问题的应用中主要指;即无序的,同时元素只出现一次(有降重的功能),底层实现即为哈希表。使用数组来做哈希的题目,是因为题目如果哈希值比较少、特别分散、跨度非常大,考虑用set。map 是一个的数据结构,map中,对key是有限制,对value没有限制的。

2023-02-21 00:21:27 41

原创 两两交换链表中的节点-代码随想录

步骤1后cur和1节点的链接会断开,所以进行前需要cur->next赋值给temp指针;,进行交换操作然后指针向后移动两位重复操作(进行迭代),直达指针下一个或下下个节点为空。如果先进行步骤2,再进行步骤1,可以将temp指针省去。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。思路:用虚拟头节点,每次指针指向两两交换的节点。

2023-02-20 23:45:37 29

原创 删除链表的倒数第N个节点-代码随想录

双指针步骤:定义fast和slow两个指针指向虚拟头节点,fast首先走n + 1步后,fast和slow同时移动至fast指向链尾的NULL,此时slow指针指向倒数第n+1个节点。核心思路:如果需要删除一个节点,则需要找到该节点的前一个节点。由于题意要求的是倒数第n个节点,可以使用。给你一个链表,删除链表的。,并且返回链表的头结点。

2023-02-20 02:07:46 27

空空如也

空空如也

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

TA关注的人

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