- 博客(323)
- 收藏
- 关注
原创 【C语言刷LeetCode】索引篇
今天开始记录下自己用C语言刷的LeetCode吧,曾经以为选择做嵌入式就不用太理会算法,C语言不可能刷LeetCode,但最后居然不搞嵌入式了,C语言也必须要刷题,终究逃不了。1.两数之和(E)...
2020-02-11 17:08:38 2676
原创 【C语言刷LeetCode】915. 分割数组(M)
链接:https://leetcode.cn/problems/partition-array-into-disjoint-intervals。解释:left = [1,1,1,0],right = [6,12]left 中的每个元素都小于或等于 right 中的每个元素。解释:left = [5,0,3],right = [8,6]输入:nums = [1,1,1,0,6,12]在完成这样的分组后返回 left 的 长度。输入:nums = [5,0,3,8,6]left 和 right 都是非空的。
2022-10-28 23:18:57 653 1
原创 【C语言刷LeetCode】378. 有序矩阵中第 K 小的元素(M)
链接:https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix。给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8。解释:矩阵中的元素为 [1,5,9,10,11,12,13,13,15],第 8 小元素是 13。输入:matrix = [[-5]], k = 1。
2022-10-28 23:16:46 761
原创 【C语言刷LeetCode】453. 最小操作次数使数组元素相等(M)
链接:https://leetcode.cn/problems/minimum-moves-to-equal-array-elements。给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1。返回让数组所有元素相等的最小操作次数。商业转载请联系官方授权,非商业转载请注明出处。n-1个数同时加一,就好比每次有一个数自身减一。因为只能做减法,所以数组最后的数只能是最小值。输入:nums = [1,2,3]输入:nums = [1,1,1]来源:力扣(LeetCode)
2022-10-28 23:13:10 788
原创 【C语言刷LeetCode】2126. 摧毁小行星(M)
如果行星碰撞时的质量 大于等于 小行星的质量,那么小行星被 摧毁 ,并且行星会 获得 这颗小行星的质量。其实也算不上中等题把,按照题意,就是要先摧毁最小行星,然后获取重量,这样才能摧毁最多行星,如果非要套个算法,那就是贪心了。- 行星与质量为 19 的小行星碰撞。- 行星与质量为 21 的小行星碰撞。- 行星与质量为 9 的小行星碰撞。- 行星与质量为 5 的小行星碰撞。行星把别的小行星摧毁后,质量为 5 + 4 + 9 + 4 = 22。行星无论如何没法获得足够质量去摧毁质量为 23 的小行星。
2022-10-28 23:09:42 384
原创 【C语言刷LeetCode】870. 优势洗牌(M)
给定两个大小相等的数组 nums1 和 nums2,nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。思路就是:先把两个数组升序排序,如果arr1[i][1]不比arr2[i][1]大的话,就把arr1[i][1]去消耗arr2的最大值。输入:nums1 = [12,24,8,32], nums2 = [13,25,32,11]输入:nums1 = [2,7,11,15], nums2 = [1,10,4,11]输出:[2,11,7,15]
2022-10-10 23:40:43 343
原创 【C语言刷LeetCode】面试题 17.11. 单词距离(M)
输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"有个内含单词的超大文本文件,给定任意两个不同的单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?商业转载请联系官方授权,非商业转载请注明出处。这个题写的不太清楚,然后用例也只有一个,其实弄明白题意就简单多了。
2022-10-10 23:36:31 176
原创 【C语言刷LeetCode】面试题 01.09. 字符串轮转(E)
给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。其实就是枚举思想,假设s1移动i位开始旋转能变成s2,那么从s2的第一位开始验证,其中旋转数组的处理就是求余操作。链接:https://leetcode.cn/problems/string-rotation-lcci。输入:s1 = "waterbottle", s2 = "erbottlewat"著作权归领扣网络所有。输入:s1 = "aa", s2 = "aba"
2022-10-10 23:31:52 468
原创 【C语言刷LeetCode】24. 两两交换链表中的节点(M)
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。链接:https://leetcode.cn/problems/swap-nodes-in-pairs。一共申请三个指针,在刚开始,把前两个节点先交换,然后就是三个指针的相互交换了,要注意最末尾的NULL。链表中节点的数目在范围 [0, 100] 内。输入:head = [1,2,3,4]输入:head = [1]输出:[2,1,4,3]输入:head = []
2022-10-10 23:26:39 462
原创 【C语言刷LeetCode】707. 设计链表(M)
val 是当前节点的值,next 是指向下一个节点的指针/引用。addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
2022-09-23 23:47:59 144
原创 【C语言刷LeetCode】1640. 能否连接形成数组(E)
另有一个由整数数组构成的数组 pieces,其中的整数也 互不相同。pieces 中的整数 互不相同(也就是说,如果将 pieces 扁平化成一维数组,数组中的所有整数互不相同)输入:arr = [91,4,64,78], pieces = [[78],[4,64],[91]]输入:arr = [49,18,16], pieces = [[16,18,49]]输入:arr = [15,88], pieces = [[88],[15]]解释:依次连接 [91]、[4,64] 和 [78]
2022-09-23 23:44:03 125
原创 【C语言刷LeetCode】2414. 最长的字母序连续子字符串的长度(M)
换句话说,字符串 "abcdefghijklmnopqrstuvwxyz" 的任意子字符串都是 字母序连续字符串。给你一个仅由小写英文字母组成的字符串 s ,返回其 最长 的 字母序连续子字符串 的长度。解释:共有 4 个不同的字母序连续子字符串 "a"、"b"、"c" 和 "ab"。例如,"abc" 是一个字母序连续字符串,而 "acb" 和 "za" 不是。著作权归领扣网络所有。解释:"abcde" 是最长的字母序连续子字符串。"ab" 是最长的字母序连续子字符串。输入:s = "abcde"
2022-09-23 23:40:43 712
原创 【C语言刷LeetCode】462. 最小操作次数使数组元素相等 II(M)
如果原数组有偶数个元素(n为偶数),那么取中间两个元素之间的任意值都能满足要求。很显然,当大于x的值的个数等于小于x的值的个数的时候,-1和1的个数相同,导数值为0。不妨设所有元素最后都变为 x ,给定数组为 [x1, x2, ... ,xn] ,那么所须移动的次数就是每个元素减去x的绝对值的加和,也就是。给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最小操作数。在一次操作中,你可以使数组中的一个元素加 1 或者减 1。输入:nums = [1,10,2,9]
2022-09-23 23:37:45 756
原创 【C语言刷LeetCode】438. 找到字符串中所有字母异位词(M)
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。输入: s = "cbaebabacd", p = "abc"异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。输入: s = "abab", p = "ab"
2022-09-16 00:32:01 352
原创 【C语言刷LeetCode】670. 最大交换(M)
先把整数按位拆分到数组,然后逆序遍历,判断是否剩下位数中是否有大于当前位的数,有的话选择最小位的。链接:https://leetcode.cn/problems/maximum-swap。给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。给定数字的范围是 [0, 108]来源:力扣(LeetCode)解释: 交换数字2和数字7。解释: 不需要交换。
2022-09-16 00:30:02 375
原创 【C语言刷LeetCode】2384. 最大回文数字(M)
从 "444947137" 中选用数字 "4449477",可以形成回文整数 "7449447"。请你找出能够使用 num 中数字形成的 最大回文 整数,并以字符串形式返回。回文数,即想到排序,但这里是字符串,所以用哈希保存字符出现次数。你 无需 使用 num 中的所有数字,但你必须使用 至少 一个数字。可以证明 "7449447" 是能够形成的最大回文整数。给你一个仅由数字(0 - 9)组成的字符串 num。可以证明 "9" 能够形成的最大回文整数。输入:num = "444947137"
2022-09-16 00:26:26 1973
原创 【C语言刷LeetCode】717. 1 比特与 2 比特字符(E)
因为我们只要碰到 0 时,不管是 “0” 也好, “10” 也好,都代表着一个字符的结尾。如果是奇数,代表最后一个“1”落单了,由于没有 “1” 这个编码,所以只能和最后一位 “0” 进行配对了。给你一个以 0 结尾的二进制数组 bits ,如果最后一个字符必须是一个一比特字符,则返回 true。首先,观察数组最后一位,题干中说了,肯定是 0,但是我们不能确定是 “0” 还是 “10”,解释: 唯一的解码方式是将其解析为一个两比特字符和一个一比特字符。关键点是只有 “0”,“10”,“11” 三种编码。
2022-09-16 00:21:46 437
原创 【C语言刷LeetCode】1592. 重新排列单词间的空格(E)
4. 如何给字符串补空格?为了方便代码编写,最后一个字符串按照非字符串的方式填充空格,那么可能总字符串比text要长,所以申请tarr时申请了len + 100,最后在tarr[len]置结束符。如果不能重新平均分配所有空格,请 将多余的空格放置在字符串末尾 ,这也意味着返回的字符串应当与原 text 字符串的长度相等。当遇见字符时,直接拷贝,当遇见空格时且上一个时字符时(加flag才能),一把补充空格。上一个字符是空格,当前字符非空格即可,但是不要忘了第一个字符串可能没有前置空格,所以这里有两种情况。
2022-09-16 00:19:20 365
原创 【C语言刷LeetCode】137.只出现一次的数字 II(M)
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。请你找出并返回那个只出现了一次的元素。见到数组先考虑排序,然后和前面数,和后面数比就行了,应该归属为简单题。链接:https://leetcode.cn/problems/single-number-ii。nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。商业转载请联系官方授权,非商业转载请注明出处。输入:nums = [0,1,0,1,0,1,99]输入:nums = [2,2,3,2]
2022-09-16 00:15:40 209
原创 【C语言刷LeetCode】2161. 根据给定数字划分数组(M)
类似的,对于大于 pivot 的元素,如果 i < j 且 nums[i] > pivot 和 nums[j] > pivot 都成立,那么 pi < pj。小于 pivot 的元素的相对位置和大于 pivot 的元素的相对位置分别为 [9, 5, 3] 和 [12, 14] ,它们在结果数组中的相对顺序需要保留。小于 pivot 的元素的相对位置和大于 pivot 的元素的相对位置分别为 [-3] 和 [4, 3] ,它们在结果数组中的相对顺序需要保留。输出:[9,5,3,10,10,12,14]
2022-09-06 23:05:59 156
原创 【C语言刷LeetCode】110. 平衡二叉树(E)
链接:https://leetcode.cn/problems/balanced-binary-tree。题目需要算一下深度,所以需要从叶子节点算起,很多题都是用到这种思想,所以这道简单题也记录下。输入:root = [1,2,2,3,3,null,null,4,4]输入:root = [3,9,20,null,null,15,7]一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。给定一个二叉树,判断它是否是高度平衡的二叉树。来源:力扣(LeetCode)输入:root = []
2022-09-06 23:03:03 144
原创 【C语言刷LeetCode】687. 最长同值路径(M)
给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值。示例2 是重点,如果他们值相等,路径实际是 = left路径 + right路径 + 1根节点。真正的[双侧]最长路径是用来取最大值,longestUnivaluePath函数的返回值。[单侧]最长路径用来返回给上一个节点,也就是递归节点要返回的值。每个节点有一个[单侧]最长路径,和一个真正的[双侧]最长路径。输入:root = [5,4,5,1,1,5]输入:root = [1,4,5,4,4,5]
2022-09-06 23:00:29 315
原创 【C语言刷LeetCode】946. 验证栈序列(M)
给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]申请一个数组栈,模拟入栈出栈过程,最后stack栈中还有元素,即false。商业转载请联系官方授权,非商业转载请注明出处。解释:1 不能在 2 之前弹出。
2022-09-06 22:56:42 172
原创 【C语言刷LeetCode】1347. 制造字母异位词的最小步骤数(M)
提示:用合适的字符替换 t 中的 'p', 'r', 'a', 'i' 和 'c',使 t 变成 s 的字母异位词。提示:用 'b' 替换 t 中的第一个 'a',t = "bba" 是 s 的一个字母异位词。输出:s = "leetcode", t = "practice"输出:s = "anagram", t = "mangaar"输出:s = "xxyyzz", t = "xxyyzz"输出:s = "friend", t = "family"输出:s = "bab", t = "aba"
2022-09-06 22:51:45 181
原创 【C语言刷LeetCode】1953. 你可以工作的最大周数(M)
一旦所有项目中的全部阶段任务都完成,或者仅剩余一个阶段任务都会导致你违反上面的规则,那么你将 停止工作。- 第 1 周,你参与并完成项目 0 中的一个阶段任务。- 第 2 周,你参与并完成项目 2 中的一个阶段任务。- 第 3 周,你参与并完成项目 1 中的一个阶段任务。- 第 5 周,你参与并完成项目 1 中的一个阶段任务。- 第 1 周,你参与并完成项目 0 中的一个阶段任务。- 第 2 周,你参与并完成项目 1 中的一个阶段任务。- 第 4 周,你参与并完成项目 1 中的一个阶段任务。...
2022-08-31 00:37:15 240
原创 【C语言刷LeetCode】395. 至少有 K 个重复字符的最长子串(M)
给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k。解释:最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。根据1
2022-08-31 00:35:05 301
原创 【C语言刷LeetCode】658. 找到 K 个最接近的元素(M)
给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。用结构体数组,同时保存索引,方便排序后根据索引找到其他的值,然后就是qsort了。输入:arr = [1,2,3,4,5], k = 4, x = -1。输入:arr = [1,2,3,4,5], k = 4, x = 3。著作权归领扣网络所有。|a - x| == |b - x| 且 a < b。|a - x| < |b - x| 或者。输出:[1,2,3,4]输出:[1,2,3,4]...
2022-08-31 00:32:26 233
原创 【C语言刷LeetCode】1004. 最大连续1的个数 III(M)
输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3。链接:https://leetcode.cn/problems/max-consecutive-ones-iii。解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2。粗体数字从 0 翻转到 1,最长的子数组长度为 10。解释:[1,1,1,0,0,1,1,1,1,1,1]...
2022-08-31 00:28:58 562
原创 【C语言刷LeetCode】1302. 层数最深叶子节点的和(M)
我们可以不断的更新最大深度,这样求最大深度,那当更新最大深度时,sum的值要如何算?这道题的难点在于怎么知道最大深度呢?所以先遍历一次,找到最大深度,然后再遍历一次,在最大深度时计算叶子节点的和。输入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]输入:root = [1,2,3,4,5,null,6,7,null,null,null,null,8]给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和。来源:力扣(LeetCode)...
2022-08-30 23:48:57 158
原创 【C语言刷LeetCode】822 翻转卡片游戏(M)
解释:假设我们翻转第二张卡片,那么在正面的数变成了 [1,3,4,4,7] , 背面的数变成了 [1,2,4,1,3]。接着我们选择第二张卡片,因为现在该卡片的背面的数是 2,2 与任意卡片上正面的数都不同,所以 2 就是我们想要的数字。如果我们通过翻转卡片来交换正面与背面上的数,那么当初在正面的数就变成背面的数,背面的数就变成正面的数。如果选中的那张卡片背面的数字 X 与任意一张卡片的正面的数字都不同,那么这个数字是我们想要的数字。1)明确一个重要观念,双面一致的数字一定不是我们想要的数字。......
2022-08-30 23:45:03 462
原创 【C语言刷LeetCode】883. 三维形体投影面积(E)
格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。第一排就是数组grid[0] = [1,2] ==> 表示两个箱子高度分别是 1、2;第二排就是数组grid[1] = [3,4] ==> 表示两个箱子高度分别是 3、4;解释:这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。输入:[[1,2],[3,4]]输入:[[1,0],[0,2]]输入:grid = [[2]]...
2022-08-29 23:56:48 320
原创 【C语言刷LeetCode】654. 最大二叉树(M)
[3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]。然后是构建左子树[0, max -1]和构建右子树[max+1, numsSize - 1]。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 []。输出:[6,3,5,null,2,0,null,null,1]...
2022-08-29 23:54:29 419
原创 【C语言刷LeetCode】1450. 在既定时间做作业的学生人数(E)
输入:startTime = [9,8,7,6,5,4,3,2,1], endTime = [10,10,10,10,10,10,10,10,10], queryTime = 5。输入:startTime = [1,1,1,1], endTime = [1,3,2,4], queryTime = 7。输入:startTime = [1,2,3], endTime = [3,2,7], queryTime = 4。第一名学生在时间 1 开始写作业,并于时间 3 完成作业,在时间 4 没有处于做作业的状态。..
2022-08-29 23:48:56 117
原创 【C语言刷LeetCode】1482. 制作 m 束花所需的最少天数(M)
而花园中只有 5 朵花,无法满足制作要求,返回 -1。输入:bloomDay = [1,10,2,9,3,8,4,7,5,6], m = 4, k = 2。输入:bloomDay = [7,7,7,7,12,7,7], m = 2, k = 3。输入:bloomDay = [1,10,3,10,2], m = 3, k = 1。3 天后:[x, _, x, _, x] // 可以制作 3 束花,答案为 3。输入:bloomDay = [1,10,3,10,2], m = 3, k = 2。...
2022-08-29 23:45:56 258
原创 【C语言刷LeetCode】1583. 统计不开心的朋友(M)
输入:n = 4, preferences = [[1, 2, 3], [3, 2, 0], [3, 1, 0], [1, 2, 0]], pairs = [[0, 1], [2, 3]]输入:n = 4, preferences = [[1, 3, 2], [2, 3, 0], [1, 3, 0], [0, 2, 1]], pairs = [[1, 3], [0, 2]]输入:n = 2, preferences = [[1], [0]], pairs = [[1, 0]]著作权归领扣网络所有。...
2022-08-26 01:00:38 1053
原创 【C语言刷LeetCode】1302. 层数最深叶子节点的和(M)
我们可以不断的更新最大深度,这样求最大深度,那当更新最大深度时,sum的值要如何算?这道题的难点在于怎么知道最大深度呢?输入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]输入:root = [1,2,3,4,5,null,6,7,null,null,null,null,8]链接:https://leetcode.cn/problems/deepest-leaves-sum。给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和。...
2022-08-26 00:56:31 276
原创 【C语言刷LeetCode】1656. 设计有序流(M)
如果流存储有 id = ptr 的 (id, value) 对,则找出从 id = ptr 开始的 最长 id 连续递增序列 ,并 按顺序 返回与这些 id 关联的值的列表。有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。// 插入 (2, "bbbbb"),返回 ["bbbbb", "ccccc"]// 插入 (4, "ddddd"),返回 ["ddddd", "eeeee"]// 插入 (1, "aaaaa"),返回 ["aaaaa"]...
2022-08-26 00:39:34 175
原创 【C语言刷LeetCode】324. 摆动排序 II(M)
给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。按照上面思路,遇到[4,5,5,6]就不行了,先填奇数位是4_5_,再填偶数位是4556,不满足要求。解释:[1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。输入:nums = [1,5,1,1,6,4]输入:nums = [1,3,2,2,3,1]输出:[1,6,1,5,1,4]输出:[2,3,1,3,1,2]来源:力扣(LeetCode)...
2022-08-26 00:35:55 191
原创 【C语言刷LeetCode】931. 下降路径最小和(M)
具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1)。给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和。输入:matrix = [[2,1,3],[6,5,4],[7,8,9]]感觉做过这种类似的题,直接动态规划,从上一行的两个数的累计路径选出最短;输入:matrix = [[-19,57],[-40,-5]]...
2022-08-26 00:33:12 233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人