c++与c语言
Mr Gao
一个爱好分享的编程学习者,关于博客有不懂的可以留言,基本看到就会回复,最后,希望我的博客可以帮助你们解决一些问题,
展开
-
1559. 二维网格图中探测环
同时,你也不能回到上一次移动时所在的格子。比方说,环 (1, 1) -> (1, 2) -> (1, 1) 是不合法的,因为从 (1, 2) 移动到 (1, 1) 回到了上一次移动时的格子。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值。给你一个二维字符网格数组 grid ,大小为 m x n ,你需要检查 grid 中是否存在 相同值 形成的环。如果 grid 中有相同值形成的环,请你返回 true ,否则返回 false。原创 2024-07-13 16:00:40 · 290 阅读 · 0 评论 -
973. 最接近原点的 K 个点-k数组维护+二分查找
给定一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点,并且是一个整数 k ,返回离原点 (0,0) 最近的 k 个点。输入:points = [[3,3],[5,-1],[-2,4]], k = 2。我们只需要距离原点最近的 K = 1 个点,所以答案就是 [[-2,2]]。输入:points = [[1,3],[-2,2]], k = 1。(答案 [[-2,4],[3,3]] 也会被接受。输出:[[3,3],[-2,4]]输出:[[-2,2]]原创 2024-07-02 19:59:58 · 359 阅读 · 0 评论 -
322. 零钱兑换-c语言
计算并返回可以凑成总金额所需的 最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。输入:coins = [1, 2, 5], amount = 11。输入:coins = [2], amount = 3。输入:coins = [1], amount = 0。你可以认为每种硬币的数量是无限的。解释:11 = 5 + 5 + 1。原创 2024-06-24 22:40:49 · 298 阅读 · 0 评论 -
打家劫舍-c语言
这题就是比较经典的动态规划的问题,动态规划的一个经典解决思路就是,我们把一个问题规模为n的问题,当转化为问题规模为n-1或者n-2的问题时,性质不变,并且问题规模为n的问题可以由问题规模为n-1或者n-2的问题得到解,满足这个性质,就可以使用动态规划算法,本质上动态规划和分治法有点思想是一样的,也是一种子问题的转化,子问题和原问题必须性质一样。解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。输入:[1,2,3,1]原创 2024-06-24 22:12:53 · 282 阅读 · 0 评论 -
160. 相交链表-哈希表法O(n)时间复杂度
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3。输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。原创 2023-11-14 12:46:46 · 93 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值
注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。输入:nums = [4,5,6,7,0,1,2]输入:nums = [11,13,15,17]输入:nums = [3,4,5,1,2]原创 2023-11-14 12:30:34 · 131 阅读 · 0 评论 -
2354. 优质数对的数目-排序去重,加统计
c 或者 b!= d ,则认为 (a, b) 和 (c, d) 是不同的两个数对。例如,(1, 2) 和 (2, 1) 不同。注意:如果 num1 在数组中至少出现 一次 ,则满足 num1 == num2 的数对 (num1, num2) 也可以是优质数对。给你一个下标从 0 开始的正整数数组 nums 和一个正整数 k。输入:nums = [1,2,3,1], k = 3。输入:nums = [5,1,1], k = 10。解释:该数组中不存在优质数对。返回 不同 优质数对的数目。原创 2023-09-26 18:24:41 · 296 阅读 · 0 评论 -
2294. 划分数组使最大差为 K-快速排序
你可以将 nums 划分成一个或多个 子序列 ,使 nums 中的每个元素都 恰好 出现在一个子序列中。在满足每个子序列中最大值和最小值之间的差值最多为 k 的前提下,返回需要划分的 最少 子序列数目。可以证明需要划分的最少子序列数目就是 2。可以将 nums 划分为两个子序列 [3,1,2] 和 [6,5]。可以将 nums 划分为三个子序列 [2,2]、[4] 和 [5]。可以将 nums 划分为两个子序列 [1,2] 和 [3]。输入:nums = [3,6,1,2,5], k = 2。原创 2023-09-26 14:31:17 · 167 阅读 · 0 评论 -
2729. 判断一个数是否迷人
解释:我们将数字 n = 192 ,2 * n = 384 和 3 * n = 576 连接,得到 192384576。这个数字包含 1 到 9 恰好各一次。解释:我们将数字 n = 100 ,2 * n = 200 和 3 * n = 300 连接,得到 100200300。这个数字不符合上述条件。连接 两个数字表示把它们首尾相接连在一起。如果 n 是迷人的,返回 true,否则返回 false。给你一个三位数整数 n。输入:n = 192。输入:n = 100。原创 2023-09-26 13:10:33 · 197 阅读 · 0 评论 -
2275. 按位与结果大于零的最长组合
计算 candidates 中的数字每种组合下 按位与 的结果。解释:组合 [16,17,62,24] 的按位与结果是 16 & 17 & 62 & 24 = 16 > 0。例如,组合 [62,12,24,14] 的按位与结果是 62 & 12 & 24 & 14 = 8 > 0。输入:candidates = [16,17,71,62,12,24,14]解释:最长组合是 [8,8] ,按位与结果 8 & 8 = 8 > 0。返回按位与结果大于 0 的 最长 组合的长度。原创 2023-09-25 11:31:14 · 170 阅读 · 0 评论 -
2406. 将区间分为最少组数-差分数组
给你一个二维整数数组 intervals ,其中 intervals[i] = [lefti, righti] 表示 闭 区间 [lefti, righti]。如果两个区间覆盖的范围有重叠(即至少有一个公共数字),那么我们称这两个区间是 相交 的。比方说区间 [1, 5] 和 [5, 8] 相交。输入:intervals = [[5,10],[6,8],[1,5],[2,3],[1,10]]输入:intervals = [[1,3],[5,6],[8,10],[11,13]]这题用差分数组去做啊。原创 2023-09-25 11:19:26 · 162 阅读 · 0 评论 -
2341. 数组能形成多少数对-数据统计
nums[0] 和 nums[3] 形成一个数对,并从 nums 中移除,nums = [3,2,3,2,2]。nums[0] 和 nums[2] 形成一个数对,并从 nums 中移除,nums = [2,2,2]。解释:nums[0] 和 nums[1] 形成一个数对,并从 nums 中移除,nums = []。nums[0] 和 nums[1] 形成一个数对,并从 nums 中移除,nums = [2]。输入:nums = [1,3,2,1,3,2,2]输入:nums = [1,1]原创 2023-09-25 10:38:36 · 137 阅读 · 0 评论 -
面试题 05.02. 二进制数转字符串
给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。提示:0.1无法被二进制准确表示。输出:“0.101”输出:“ERROR”原创 2023-09-24 12:13:20 · 162 阅读 · 0 评论 -
面试题 03.03. 堆盘子-c语言
因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push()和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,pop()返回的值,应该跟只有一个栈时的情况一样)。进阶:实现一个popAt(int index)方法,根据指定的子栈,执行pop操作。当某个栈为空时,应当删除该栈。当栈中没有元素或不存在该栈时,pop,popAt 应返回 -1.原创 2023-09-24 12:04:09 · 201 阅读 · 0 评论 -
LCR 157. 套餐内商品的排列顺序
输出:[“aegw”,“aewg”,“agew”,“agwe”,“aweg”,“awge”,“eagw”,“eawg”,“egaw”,“egwa”,“ewag”,“ewga”,“gaew”,“gawe”,“geaw”,“gewa”,“gwae”,“gwea”,“waeg”,“wage”,“weag”,“wega”,“wgae”,“wgea”]某店铺将用于组成套餐的商品记作字符串 goods,其中 goods[i] 表示对应商品。返回结果 无顺序要求,但不能含有重复的元素。输入:goods = “agew”原创 2023-09-24 11:24:42 · 228 阅读 · 0 评论 -
321. 拼接最大数-枚举所有组-单调栈+贪心算法
给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k原创 2023-09-23 14:56:06 · 293 阅读 · 0 评论 -
335. 路径交叉-数学归纳法(力扣目前c语言)
从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动 distance[1] 米,向南移动 distance[2] 米,向东移动 distance[3] 米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。如果相交,返回 true;否则,返回 false。输入:distance = [2,1,1,2]输入:distance = [1,2,3,4]输入:distance = [1,1,1,1]给你一个整数数组 distance。原创 2023-09-23 11:38:49 · 178 阅读 · 0 评论 -
258. 各位相加-递归法
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。由于 2 是一位数,所以返回 2。输入: num = 38。输入: num = 0。原创 2023-09-23 10:57:03 · 163 阅读 · 0 评论 -
58. 最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = “Hello World”输出:5解释:最后一个单词是“World”,长度为5。示例 2:输入:s = " fly me to the moon "输出:4解释:最后一个单词是“moon”,长度为4。示例 3:输入:s = “luffy is still joyboy”输出:6。原创 2023-09-22 11:27:39 · 122 阅读 · 0 评论 -
33. 搜索旋转排序数组-二重二分查找
在传递给函数之前,nums 在预先未知的某个下标 k(0原创 2023-09-22 11:24:37 · 186 阅读 · 0 评论 -
78. 子集-巧用二进制排列法
这一题,博主觉得很值得去学习,因为这个题目可以教会我们怎么创建集合的子集,这里很棒的一个方法就是,每个数的二进制01排列是不同的,通过这种方法,我们就可以,列举出,一个集合所有的排序,比如一个大小为3的几个,他的子集数量为8 那么0-7的七个数的01二进制就会有八种,然后,将对应1的位置进行数据取出,就可以很好的解决问题。输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]输入:nums = [1,2,3]输入:nums = [0]输出:[[],[0]]原创 2023-09-22 11:01:13 · 208 阅读 · 0 评论 -
2716. 最小化字符串长度
解释:我们可以选择位于下标 1 处的字符 ‘d’ 开始。接着删除下标 1 左侧最近的那个 ‘d’(位于下标 0)以及下标 1 右侧最近的那个 ‘d’(位于下标 2)。接着删除下标 2 左侧最近的那个 ‘a’(位于下标 1)以及下标 2 右侧最近的那个 ‘a’(位于下标 3)。接着删除下标 1 左侧最近的那个 ‘a’(位于下标 0)以及下标 1 右侧最近的那个 ‘a’(位于下标 2)。下标 1 左侧不存在字符 ‘b’ ,但右侧存在一个字符 ‘b’(位于下标 2),所以会删除位于下标 2 的字符 ‘b’。原创 2023-09-21 15:52:10 · 132 阅读 · 0 评论 -
2712. 使所有字符相等的最小成本
这题其实比较特别,我也是看别人思路才做出来的,这题的关键在于,没碰到一个0-1的相邻对,我们就一定要采取一定的方法去解决,但是在我们处理这个0-1相邻对时,其他的相邻0-1对是不受影响的,所以遵循这个原理,我们就可以去写出自己的代码。解释:执行第二种操作,选中下标 i = 2 ,可以得到 s = “0000” ,成本为 2。解释:执行第一种操作,选中下标 i = 2 ,可以得到 s = “101101” ,成本为 3。反转 字符意味着:如果原来的值是 ‘0’ ,则反转后值变为 ‘1’ ,反之亦然。原创 2023-09-21 15:35:11 · 102 阅读 · 0 评论 -
2735. 收集巧克力-迭代更新法
每个巧克力都对应一个不同的类型,最初,位于下标 i 的巧克力就对应第 i 个类型。因此,收集所有类型的巧克力需要的总成本是 1 + 2 + 3 = 6。接着,我们用成本 5 执行一次操作,巧克力的类型变更为 [1,2,0]。然后,我们用成本 5 执行一次操作,巧克力的类型变更为 [2,0,1]。因此,收集所有类型的巧克力需要的总成本是 (1 + 5 + 1 + 5 + 1) = 13。解释:最开始,巧克力的类型分别是 [0,1,2]。我们可以用成本 1 购买第 1 个类型的巧克力。原创 2023-09-21 15:15:48 · 123 阅读 · 0 评论 -
2614. 对角线上的质数-c语言解法
解释:数字 1、3、9、10 和 17 是所有满足"位于至少一条对角线上"的数字。由于 17 是最大的质数,故返回 17。解释:数字 1、3、6、9 和 11 是所有 “位于至少一条对角线上” 的数字。由于 11 是最大的质数,故返回 11。在上图中,一条对角线是 [1,5,9] ,而另一条对角线是 [3,5,7]。输入:nums = [[1,2,3],[5,17,7],[9,11,10]]输入:nums = [[1,2,3],[5,6,7],[9,10,11]]原创 2023-09-20 17:31:09 · 352 阅读 · 0 评论 -
872. 叶子相似的树-遍历树存储数据对比
输入:root1 = [3,5,1,6,2,9,8,null,nu8]如果给定的两个根结点分别为 root1 和 root2 的树是叶相似的,则返回 true;举个例子,如上图所示,给定一棵叶值序列为 (6, 7, 4, 9, 8) 的树。输入:root1 = [1,2,3], root2 = [1,3,2]如果有两棵二叉树的叶值序列是相同,那么我们就认为它们是 叶相似 的。原创 2023-09-11 23:52:23 · 139 阅读 · 0 评论 -
667. 优美的排列 II-c语言
解释:[1, 3, 2] 包含 3 个范围在 1-3 的不同整数,并且 [2, 1] 中有且仅有 2 个不同整数:1 和 2。解释:[1, 2, 3] 包含 3 个范围在 1-3 的不同整数,并且 [1, 1] 中有且仅有 1 个不同整数:1。返回列表 answer。如果存在多种答案,只需返回其中 任意一种。输入:n = 3, k = 1。输入:n = 3, k = 2。输出:[1, 2, 3]输出:[1, 3, 2]原创 2023-09-11 23:39:27 · 154 阅读 · 0 评论 -
665. 非递减数列-先改后验法
我们是这样定义一个非递减数列的: 对于数组中任意的 i (0原创 2023-09-11 23:10:15 · 176 阅读 · 0 评论 -
1275. 找出井字棋的获胜者-c语言-枚举法
给你一个数组 moves,其中每个元素是大小为 2 的另一个数组(元素分别对应网格的行和列),它按照 A 和 B 的行动顺序(先 A 后 B)记录了两人各自的棋子位置。输入:moves = [[0,0],[1,1],[2,0],[1,0],[1,2],[2,1],[0,1],[0,2],[2,2]]输入:moves = [[0,0],[1,1],[0,1],[0,2],[1,0],[2,0]]输入:moves = [[0,0],[2,0],[1,1],[2,1],[2,2]]解释:“B” 获胜。原创 2023-09-07 18:29:27 · 185 阅读 · 2 评论 -
KMP原理详解-不一样的代码
3.2对于第二个位置,我们知道,如果第二个字符匹配失败了,我们是不是该看看当前字符是不是第一个字符匹配,那如果,第二个字符也等于第一个字符,是不是可以直接跳过了,就是都不能匹配了,kmpindex[1]=kmpindex[0]。匹配到第一个d 之后,就不能继续匹配了,这个时候,有人说,我们从头开始匹配吧,从之后的b开始重新匹配,但是呢,人们发现,如果重新开始匹配实际上可以节省一些步骤,比如,我们像下面这样的字符串,匹配到d不能继匹配了,我们可以直接从第四个位置开始匹配。原创 2023-06-18 23:27:42 · 163 阅读 · 0 评论 -
2034. 股票价格波动-c++,无序字典+有序集合
某些情况下,有的记录可能是错的。// 时间戳为 [1,2] ,对应的股票价格为 [10,5]。// 时间戳为 [1,2,4] ,对应价格为 [3,5,2]。// 返回 10 ,最高价格的时间戳为 1 ,价格为 10。// 时间戳为 [1] ,对应的股票价格为 [10]。// 返回 5 ,最新时间戳为 2 ,对应价格为 5。// 返回 2 ,最低价格时间戳为 4 ,价格为 2。// 之前时间戳为 1 的价格错误,价格更新为 3。// 时间戳为 [1,2] ,对应股票价格为 [3,5]。原创 2023-04-10 14:21:46 · 581 阅读 · 0 评论 -
c++/c语言编译之后的exe文件应该如何运行-解决方法(实现应用)
当然,这种方法比较麻烦,每次我们运行exe文件都需要那三个配置文件,这显然是麻烦的,所以我们可以把那三个文件放入我们的系统变量检索环境中,这样,运行exe文件的时候我们就可以不用在配置缓解了,可以直接运行,注:这一步新手对这个操作可能不太懂,谨慎操作。对于很多小伙伴应该都是学习c++/c,当然很多人其实只是一直在自己的集成开发环境中不断编写代码然后运行并解决相应的任务,但是其实这样自己的代码可移植性并没有得到很好的利用,如果没有了编译器,那么自己的代码就不能运行。重新安装程序可能会解决此问题。原创 2023-03-16 19:29:01 · 2729 阅读 · 0 评论 -
c语言/c++实现牛顿迭代法求解一元二次方程的两个根
下面是一段c语言代码听过牛顿迭代法可以求解一元二次方程的两个根,当然里面的参数还是很有讲究的,可以通过调节limit_min修改得到结果的精度,另外 a,b,c则代表方程为。.好的,就说那么多,有问题的可以在下面留言哈。原创 2023-03-14 22:24:23 · 1309 阅读 · 0 评论 -
2133. 检查是否每一行每一列都包含全部整数-遍历矩阵
对一个大小为 n x n 的矩阵而言,如果其每一行和每一列都包含从 1 到 n 的 全部 整数(含 1 和 n),则认为该矩阵是一个 有效 矩阵。给你一个大小为 n x n 的整数矩阵 matrix ,请你判断矩阵是否为一个有效矩阵:如果是,返回 true;输入:matrix = [[1,2,3],[3,1,2],[2,3,1]]输入:matrix = [[1,1,1],[1,2,3],[1,2,3]]解释:在此例中,n = 3 ,每一行和每一列都包含数字 1、2、3。因此,返回 false。原创 2022-12-19 15:34:03 · 254 阅读 · 0 评论 -
1496. 判断路径是否相交-哈希表法
给你一个字符串 path,其中 path[i] 的值可以是 ‘N’、‘S’、‘E’ 或者 ‘W’,分别表示向北、向南、向东、向西移动一个单位。如果路径在任何位置上与自身相交,也就是走到之前已经走过的位置,请返回 true;否则,返回 false。你从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。输入:path = “NESWW”解释:该路径没有在任何位置相交。输入:path = “NES”解释:该路径经过原点两次。原创 2022-12-19 15:27:39 · 212 阅读 · 0 评论 -
1122. 数组的相对排序-力扣双百代码
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输入:arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6]输出:[2,2,2,1,4,3,3,9,6,7,19]输出:[22,28,8,6,17,44]原创 2022-12-19 14:58:25 · 136 阅读 · 0 评论 -
228. 汇总区间-c语言
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x。给定一个 无重复元素 的 有序 整数数组 nums。输出:[“0”,“2->4”,“6”,“8->9”]输入:nums = [0,2,3,4,6,8,9]输入:nums = [0,1,2,4,5,7]输出:[“0->2”,“4->5”,“7”]原创 2022-12-18 16:57:48 · 495 阅读 · 0 评论 -
2266. 统计打字方案数-动态规划
给你一个字符串 pressedKeys ,表示 Bob 收到的字符串,请你返回 Alice 总共可能发出多少种文字信息。“aaadd”, “abdd”, “badd”, “cdd”, “aaae”, “abe”, “bae” 和 “ce”。但是,由于传输的错误,Bob 没有收到 Alice 打字的字母信息,反而收到了 按键的字符串信息。为了 打出 一个字母,Alice 需要 按 对应字母 i 次,i 是该字母在这个按键上所处的位置。由于总共有 8 种可能的信息,所以我们返回 8。原创 2022-12-18 16:29:08 · 497 阅读 · 0 评论 -
451. 根据字符出现频率排序-字符映射法+快速排序
一个字符出现的 频率 是它出现在字符串中的次数。因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。解释: 'c’和’a’都出现三次。此外,"aaaccc"也是有效的答案。解释: 此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。注意"cacaca"是不正确的,因为相同的字母必须放在一起。解释: 'e’出现两次,'r’和’t’都只出现一次。注意’A’和’a’被认为是两种不同的字符。输入: s = “cccaaa”输入: s = “Aabb”输出: “cccaaa”原创 2022-12-18 16:13:24 · 414 阅读 · 0 评论 -
2239. 找到最接近 0 的数字-遍历一次数组
给你一个长度为 n 的整数数组 nums ,请你返回 nums 中最 接近 0 的数字。解释:1 和 -1 都是距离 0 最近的数字,所以返回较大值 1。输入:nums = [-4,-2,1,4,8]-4 到 0 的距离为 |-4| = 4。-2 到 0 的距离为 |-2| = 2。所以,数组中距离 0 最近的数字为 1。1 到 0 的距离为 |1| = 1。4 到 0 的距离为 |4| = 4。8 到 0 的距离为 |8| = 8。输入:nums = [2,-1,1]原创 2022-12-17 16:07:45 · 791 阅读 · 0 评论