![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++编程序笔记
文章平均质量分 59
风一样的航哥
导航/控制/算法
展开
-
使用hashmap优化时间复杂度,leetcode1577
编程,我最喜欢数学之类的题目了,正确,简洁,计算的操作让计算机运行。原创 2024-03-11 15:14:59 · 387 阅读 · 0 评论 -
使用回溯法解决leetcode 1219
只要当前位置不是0,就可以dfs,记得dfs之后,要恢复原状,遍历完整个数组之后,返回最大值即可。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是。一种收集最多黄金的路线是:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。当有了不少算法在脑海中之后,很快想到这是一个深度优先搜索+回溯的题目。你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为。一种收集最多黄金的路线是:9 -> 8 -> 7。原创 2024-03-11 15:03:13 · 489 阅读 · 0 评论 -
C++结合Lambda表达式在函数内部实现递归
python果然更加现代,函数里面可以定义函数。这是一道leetcode上面的题目,题目本身不难,只需要改变一次状态就行了。改变状态中需要确定点击的是什么内容,如果是空白则需要递归找到所有的空白。击败97.79%使用 C++ 的用户。击败15.20%使用 C++ 的用户。C++感觉需要重新学习了。让我们一起来玩扫雷游戏!还是不行,不能递归调用。)中的下一个点击位置(原创 2024-02-20 22:02:27 · 887 阅读 · 0 评论 -
leetcode 每日一题统计范围内的元音字符串数
题解思路:字符预处理+前缀和原创 2023-06-02 10:20:08 · 330 阅读 · 0 评论 -
leetcode 1209 学会删除字符串
首先定义一个数据类 CharWithCount,用来表示字符和其出现的次数。然后遍历字符串,对于每个字符,如果栈顶元素和当前字符相同,就将栈顶元素出栈,将其出现次数加一,否则将当前字符作为新的元素入栈。每次入栈或者出栈时,要判断栈顶元素出现次数是否达到了 k,如果是的话就将其出栈。最后将栈中剩余的元素按顺序拼接成字符串即可。原创 2023-05-25 21:45:00 · 539 阅读 · 0 评论 -
使用优先队列解决自己构造的数据类型-解决leetcode1090
使用自定义的数据和比较函数,构造优先队列解决贪心算法。原创 2023-05-23 10:00:28 · 327 阅读 · 0 评论 -
使用优先队列解决自己构造的数据类型-解决贪心问题
题解:其实题目就是一种排序,让不相等的变成相邻,这个有一点贪心法的很自然可以想到一种方案:按照数字的值划分成不同的组,每次从不同值的组里面选择最多数量的,直到选择完毕。上面就用到了自己构造的数据类型和排序方法,预处理部分采用了hashmap来统计每一个元素出现的次数。执行用时:88 ms, 在所有 C++ 提交中击败了61.47%的用户。根据我的理解,贪心问题大部分跟有限队列有关,在上篇文章写了。之后,今天看leetcode题目,就是典型的一道贪心题目。配合优先队列的最大堆,于是可以写出来如下的代码。原创 2023-05-14 20:37:56 · 320 阅读 · 0 评论 -
使用优先队列解决自己构造的数据类型
使用优先队列,将会十分简单,难点在于怎么包含两种类型,于是想到了pair这个神奇的东西。然后就是最大堆的比较函数,需要写一个结构体,声明比较函数。在C++中优先队列有两种,最大堆和最小堆。当数据类型为int的时候,大家都会使用,但是如果数据不是单一的,比如数据是一个hashmap怎么办?当然,这只是一个解题的模板,因为题目中说身高互不相同,这种方法并没有考虑这个特性,并不是最优解。其他贪心的算法,也可以构建这样的结构来求解。原创 2023-04-25 16:13:23 · 585 阅读 · 0 评论 -
leetcode 平分正方形的几何题目
首先要知道平分两个正方形的直线为经过两个正方形中心的直线,然后就是计算4个交点。找出来四个最远的交点就可以了。要注意交点一定在正方形的边长上,这样就涉及到求取交点的时候是取X值,还是Y值。经过画图分析,当斜率在-1到1之间的时候,取X值,其他情况取Y值。原创 2022-12-17 18:59:53 · 112 阅读 · 0 评论 -
leetcode 1780(贪心法解决)
判断一个数字是否可以表示成三的幂的和?我使用贪心法!原创 2022-12-09 09:34:38 · 422 阅读 · 0 评论 -
leetcode 1775. 通过最少操作次数使数组的和相等(等效找零问题)
使用贪心法+哈希表思想来解决这道题目,因为范围是1-6,所有直接遍历手写了。原创 2022-12-07 10:48:47 · 574 阅读 · 0 评论 -
leetcode 1805. 字符串中不同整数的数目(状态机思路)
使用有限状态机来解决这个问题。原创 2022-12-06 14:28:04 · 127 阅读 · 0 评论 -
leetcode 468 验证IP地址是否有效(竟然花费了两个小时)
验证字符串是否有前导0,使用了转为int之后,再转为字符串,如果两个字符串相等就是没有,否则就是有。同时使用了字符串分割函数,这个分割函数的bug就是如果两个分隔符之间什么都没有,就不会返回数据,这点也需要后续改进。原创 2022-12-03 22:47:03 · 631 阅读 · 0 评论 -
在嵌入式里面实现printf()类似的功能
使用可变参数在嵌入式中实现printf函数,你知道如何实现吗?原创 2022-11-30 17:41:59 · 809 阅读 · 1 评论 -
传递信息 C++ 广度优先搜索
广度优先搜索解决有向图的问题原创 2022-11-21 21:40:50 · 107 阅读 · 0 评论 -
leetcode 792 匹配子序列的单词数(哈希表+双指针)
比较两个字符串s和t,其中一个是另外一个子串的问题,可以使用双指针一次遍历。那么这道题目就是在外面再加一层for循环,遍历完所有的字符串数组就可以了。于是我就提交了,发现超时了。。。。既然超时了,那么就要算法优化,删除一些重复的操作。看着超时的测试用例,我忽然就懂了,因为测试的字符串有很多是重复的,所以增加了一个哈希表来去重,这样再遍历一遍哈希表,就可以通过了。原创 2022-11-17 13:43:59 · 488 阅读 · 0 评论 -
leetcode 890. 查找和替换模式 c++
两个哈希表实现键值一对一映射,不重复。原创 2022-11-12 13:47:38 · 102 阅读 · 0 评论 -
LCP 33. 蓄水(C++ 模拟法解决这道题目)
题意很简单,就是两种操作,每次操作会增加一次操作步数,求最小操作步数。转换为数学问题就是:min(x+max(vat[i]/bucket[i])),其中,当bucket[i]满足max(vat[i]/bucket[i])的时候,x++,bucket[i]++,第一反应是不是应该动态规划,想了半天不知道怎么规划;于是退而求其次,使用模拟法来求解。基本思路就是既然题目肯定有一个最小值,那我只要控制x的范围,让x不断增加,总有一个最小值,考虑到数据范围,x的值上限为10000。原创 2022-11-09 22:54:28 · 243 阅读 · 0 评论 -
华大芯片时钟调试配置记录
本文记录了一次从8M晶振配置为12M晶振的过程,调试不出来很容易自我怀疑,其实只要静下心来,往往事情就会考虑周全,也不容易出错。原创 2022-11-08 19:32:12 · 708 阅读 · 0 评论 -
华大(现在改名小华半导体)芯片启动文件详细讲解
启动文件由汇编语言编写,是系统上电复位后第一个执行的程序,主要做了以下工作:1)初始化堆栈指针:SP=_initial_sp。2)初始化程序指针:PC=Reset_Handler。3)初始化中断向量表。4)设定sram3的等待周期,配置系统时钟。5)调用C库函数_main初始化用户堆栈,最终调用main函数进入C语言世界。原创 2022-11-02 16:42:52 · 2347 阅读 · 0 评论 -
leetcode 179 自定义一个字符比较函数
通过一个例题,学习C++的sort自定义比较函数,同时学会字符串的比较,很巧妙。原创 2022-10-20 19:15:48 · 455 阅读 · 0 评论 -
使用c语言仿真酒吧博弈问题
酒吧博弈问题的C语言模拟原创 2022-10-18 10:07:24 · 813 阅读 · 0 评论 -
生命不息,刷题不止,简单题学习知识点
C++集合的操作,遇到啥操作,补充啥操作。原创 2022-07-29 18:15:00 · 137 阅读 · 0 评论 -
C++ 正则表达式的应用,虽然这道题目是一个动态规划题目,但是使用库真的很方便,总不能总是造轮子不是?
剑指 Offer 19. 正则表达式匹配请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa"p = "a*"原创 2022-06-20 21:34:26 · 231 阅读 · 0 评论 -
串口接收数据方案设计
本文以串口为例,但是也可以扩展到其他两个设备通信的地方,只要涉及到数据的传输和转移,就会有通信,只要通信的设备处理速率不同就会有缓存,只有有缓存,就会涉及到数据的组织形式,而先进先出的模式对应着现实世界大部分通信情况,队列成为了缓存的最佳选择。队列的大小与处理器有关,也与应用有关。合理的选择应当满足在每一包数据来的时候,有足够的空间来接收,并且程序能够在下一包数据来之前处理完缓存的数据并产生足够的空间。...原创 2022-06-13 19:15:00 · 1018 阅读 · 0 评论 -
leetcode 1818 绝对值,排序,二分法,最大值
1818. 绝对差值和难度中等130收藏分享切换为英文接收动态反馈给你两个正整数数组nums1和nums2,数组的长度都是n。数组nums1和nums2的绝对差值和定义为所有|nums1[i] - nums2[i]|(0 <= i < n)的总和(下标从 0 开始)。你可以选用nums1中的任意一个元素来替换nums1中的至多一个元素,以最小化绝对差值和。在替换数组nums1中最多一个元素之后,返回最小绝对差值和。因为答...原创 2022-05-24 18:40:55 · 195 阅读 · 0 评论 -
leetcode 1482 猜猜看啊,这道题目怎么二分?
1482. 制作 m 束花所需的最少天数难度中等245收藏分享切换为英文接收动态反馈给你一个整数数组bloomDay,以及两个整数m和k。现需要制作m束花。制作花束时,需要使用花园中相邻的k朵花。花园中有n朵花,第i朵花会在bloomDay[i]时盛开,恰好可以用于一束花中。请你返回从花园中摘m束花需要等待的最少的天数。如果不能摘到m束花则返回-1。示例 1:输入:bloomDay = [1,10,3,10,2], m =...原创 2022-05-24 21:00:00 · 105 阅读 · 0 评论 -
leetcode 986 区间交集,双指针遍历
986. 区间列表的交集难度中等283收藏分享切换为英文接收动态反馈给定两个由一些闭区间组成的列表,firstList和secondList,其中firstList[i] = [starti, endi]而secondList[j] = [startj, endj]。每个区间列表都是成对不相交的,并且已经排序。返回这两个区间列表的交集。形式上,闭区间[a, b](其中a <= b)表示实数x的集合,而a <= x <= b。两个...原创 2022-05-22 22:45:13 · 146 阅读 · 0 评论 -
leetcode 1989 这样的题目都可以二分,增加了二分法的应用范围
1898. 可移除字符的最大数目难度中等34收藏分享切换为英文接收动态反馈给你两个字符串s和p,其中p是s的一个子序列。同时,给你一个元素互不相同且下标从 0 开始计数的整数数组removable,该数组是s中下标的一个子集(s的下标也从 0 开始计数)。请你找出一个整数k(0 <= k <= removable.length),选出removable中的前k个下标,然后从s中移除这些下标对应的k个字符。整数k需满足:...原创 2022-05-22 21:25:13 · 195 阅读 · 0 评论 -
leetcode 1870 这个二分用到了double数据类型
1870. 准时到达的列车最小时速难度中等26收藏分享切换为英文接收动态反馈给你一个浮点数hour,表示你到达办公室可用的总通勤时间。要到达办公室,你必须按给定次序乘坐n趟列车。另给你一个长度为n的整数数组dist,其中dist[i]表示第i趟列车的行驶距离(单位是千米)。每趟列车均只能在整点发车,所以你可能需要在两趟列车之间等待一段时间。例如,第1趟列车需要1.5小时,那你必须再等待0.5小时,搭乘在第 2 小时发车的第2趟列车。返回能满足你准时到...原创 2022-05-22 19:12:08 · 79 阅读 · 0 评论 -
leetcode 1760 这个题目题解是二分法,想不到的路啊
1760. 袋子里最少数目的球难度中等81给你一个整数数组nums,其中nums[i]表示第i个袋子里球的数目。同时给你一个整数maxOperations。你可以进行如下操作至多maxOperations次:选择任意一个袋子,并将袋子里的球分到2 个新的袋子中,每个袋子里都有正整数个球。 比方说,一个袋子里有5个球,你可以把它们分到两个新袋子里,分别有1个和4个球,或者分别有2个和3个球。 你的开销是单个袋子里球数目的最大值,你想要...原创 2022-05-21 22:52:13 · 258 阅读 · 0 评论 -
leetcode 240 搜索二维矩阵,因为特殊的排序,所以有特殊的搜索
240. 搜索二维矩阵 II难度中等1025编写一个高效的算法来搜索mxn矩阵matrix中的一个目标值target。该矩阵具有以下特性:每行的元素从左到右升序排列。 每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true示例 2:输入:matri...原创 2022-05-21 22:19:03 · 101 阅读 · 0 评论 -
leetcode 59 螺旋矩阵,模拟法
59. 螺旋矩阵 II难度中等710给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]提示:1 <= n <= 20通过次数198,515提交次数260,034题解:模拟一个机器人,按照螺旋线的顺序依次行走矩阵,直到走完,行走方向原创 2022-05-21 14:15:02 · 164 阅读 · 0 评论 -
leetcode 56 合并区间,我的基本思路是排序之后,右端点覆盖,为了避免溢出,我在原来的数组增加了一个节点。
56. 合并区间难度中等1489收藏分享切换为英文接收动态反馈以数组intervals表示若干个区间的集合,其中单个区间为intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为...原创 2022-05-20 20:24:45 · 82 阅读 · 0 评论 -
leetcode 668 困难程度的二分法,是我不曾想到的道路
668. 乘法表中第k小的数难度困难196收藏分享切换为英文接收动态反馈几乎每一个人都用乘法表。但是你能在乘法表中快速找到第k小的数字吗?给定高度m、宽度n的一张m * n的乘法表,以及正整数k,你需要返回表中第k小的数字。例1:输入: m = 3, n = 3, k = 5输出: 3解释: 乘法表:1 2 32 4 63 6 9第5小的数字是 3 (1, 2, 2, 3, 3).例 2:输入: m = 2, n = 3, k = 6输出: 6...原创 2022-05-18 10:06:24 · 208 阅读 · 0 评论 -
leetcode 1909 一道简单题目,做了一个小时
1909. 删除一个元素使数组严格递增难度简单26收藏分享切换为英文接收动态反馈给你一个下标从0开始的整数数组nums,如果恰好删除一个元素后,数组严格递增,那么请你返回true,否则返回false。如果数组本身已经是严格递增的,请你也返回true。数组nums是严格递增的定义为:对于任意下标的1 <= i < nums.length都满足nums[i - 1] < nums[i]。示例 1:输入:nums = [1...原创 2022-05-15 17:11:44 · 292 阅读 · 0 评论 -
leetcode 784 递归和回溯来解决?完全没有思路,于是我用了C语言的思维来解决
784. 字母大小写全排列难度中等383收藏分享切换为英文接收动态反馈给定一个字符串s,通过将字符串s中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。以任意顺序返回输出。示例 1:输入:s = "a1b2"输出:["a1b2", "a1B2", "A1b2", "A1B2"]示例 2:输入: s = "3z4"输出: ["3z4","3Z4"]提示:1 <= s.length <= 12 ...原创 2022-05-15 13:08:19 · 170 阅读 · 0 评论 -
递归回溯算法解决组合和排列问题,C++实现,leetcode77和46
77. 组合难度中等977收藏分享切换为英文接收动态反馈给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]提示:1 <= n <= 20 1 <= k <=原创 2022-05-15 11:39:02 · 435 阅读 · 0 评论 -
二叉树的层序遍历,终于学会了
102. 二叉树的层序遍历难度中等1322收藏分享切换为英文接收动态反馈给你二叉树的根节点root,返回其节点值的层序遍历。 (即逐层地,从左到右访问所有节点)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]提示:树中节点数目在范围[0, 2000]内 -1...原创 2022-05-13 19:34:48 · 358 阅读 · 0 评论 -
leetcode 153 二分法,办法不是最优,但是很好理解
153. 寻找旋转排序数组中的最小值难度中等748收藏分享切换为英文接收动态反馈已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums = [0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,2] 若旋转7次,则可以得到[0,1,2,4,5,6,7]注意,数组[a[0], a[1], a[2], ..., a[n-1]]旋转一次的结果为数组[a[n-1], a[0],...原创 2022-05-13 18:49:01 · 88 阅读 · 0 评论