![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode 题解
力扣题解
狂吃不胖温同学
这个作者很懒,什么都没留下…
展开
-
LeetCode 面试题 17.16. 按摩师
LeetCode 面试题 17.16. 按摩师题目描述一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。注意:本题相对原题稍作改动示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:输入: [2,7,9,3,1]输出: 12解释: 选择 1原创 2020-06-29 23:19:46 · 119 阅读 · 0 评论 -
LeetCode 5432.去掉最低工资和最高工资后的平均工资值(C++)
LeetCode 5432.去掉最低工资和最高工资后的平均工资值题目描述给你一个整数数组 salary ,数组里每个数都是 唯一 的,其中 salary[i] 是第 i 个员工的工资。请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。示例 1:输入:salary = [4000,3000,1000,2000]输出:2500.00000解释:最低工资和最高工资分别是 1000 和 4000 。去掉最低工资和最高工资以后的平均工资是 (2000+3000)/2= 2500示例原创 2020-06-28 20:46:42 · 210 阅读 · 0 评论 -
LeetCode 5436.一维数组的动态和(C++)
5436. 一维数组的动态和题目描述给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1原创 2020-06-14 19:57:50 · 386 阅读 · 0 评论 -
LeetCode 面试题64. 求1+2+…+n(C语言)
面试题64. 求1+2+…+n题目描述思路源代码提交原创 2020-06-02 21:38:51 · 149 阅读 · 0 评论 -
LeetCode 26.删除排序数组中的重复项(C++)
26. 删除排序数组中的重复项题目描述给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该原创 2020-05-29 22:23:20 · 171 阅读 · 0 评论 -
LeetCode 面试题02.03. 删除中间节点 (C语言)
面试题02.03. 删除中间节点Description实现一种算法,删除单向链表中间的某个节点(除了第一个和最后一个节点,不一定是中间节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->fAnalyze给定的函数如下:@param node 要删除的结点就是给你一个链表中的结点,然后删除这个结点,只要把下一个结点的值赋给当原创 2020-05-21 19:59:31 · 222 阅读 · 0 评论 -
LeetCode 136. 只出现一次的数字(C语言)
136. 只出现一次的数字Description给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4Analyze给定的函数如下:@param nums 一个整数数组@param numsSize 数组长度@return 只出现一次的数字这题原创 2020-05-21 19:59:07 · 289 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第N个节点 (C语言)
19. 删除链表的倒数第N个节点Description给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。Analyze给定的函数如下:@param head 链表头结点(带数据)@param n 一个整数,表示要删除的倒数第原创 2020-05-21 19:53:42 · 430 阅读 · 0 评论 -
LeetCode 11. 盛最多水的容器(C语言)
11. 盛最多水的容器Description给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49An原创 2020-05-21 19:50:37 · 422 阅读 · 1 评论 -
LeetCode 82. 删除排序链表中的重复元素 II (C语言)
82.删除排序链表中的重复元素 IIDescription给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现的数字。Analyze链表操作,删除一个有序链表中的所有重复元素。给定函数如下:@param head 链表的头结点(带数据)首先考虑特殊情况:给定的链表为空给定的链表只有一个元素上述两种都是特殊情况,但在此题处理方法都是一样的,即返回给定的链表然后考虑一般情况:比较发现当前结点和下一结点值相同时,应当把当前结点和下一结点一.原创 2020-05-21 19:47:27 · 479 阅读 · 0 评论 -
LeetCode 70.爬楼梯(C语言)
70. 爬楼梯题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶思路源代码提交...原创 2020-06-23 16:24:42 · 475 阅读 · 0 评论 -
LeetCode 66. 加一(C语言)
66. 加一题目描述给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。思路大数相加的题,只需要考虑进位,又由于只是加1,尾数是9才会产生进位源代码/** *原创 2020-06-01 20:33:09 · 290 阅读 · 0 评论 -
LeetCode 58. 最后一个单词的长度(C++)
58. 最后一个单词的长度题目描述给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例:输入: “Hello World”输出: 5思路使用字串输入输出流可以很方便的分隔以空格、制表符隔开的字符串子串源代码及注释class Solution {public: int le原创 2020-05-31 20:00:31 · 131 阅读 · 0 评论 -
LeetCode 35. 搜索插入位置(C语言)
35. 搜索插入位置题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0思路就是一个二分查找源代码及注释int searchInsert(int* nums原创 2020-05-30 21:00:43 · 284 阅读 · 0 评论 -
LeetCode 20. 有效的括号(C语言)
20. 有效的括号题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true思原创 2020-05-24 20:23:38 · 341 阅读 · 0 评论 -
LeetCode 376. 摆动序列(C语言)
376. 摆动序列题目描述如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列原创 2020-05-23 22:28:27 · 508 阅读 · 0 评论 -
LeetCode 455. 分发饼干(C语言)
455. 分发饼干题目描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。示例 1:输入: [1,2,3], [1,1]输原创 2020-05-23 21:20:49 · 909 阅读 · 0 评论 -
LeetCode 15. 三数之和(C++)
15.三数之和题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]思路此题是两数之和升级版,可以借鉴两数之和的双指针思想,即 a+b=-c,将数组排序之后从两头开始遍历,c先从数组原创 2020-05-22 19:43:28 · 240 阅读 · 0 评论 -
LeetCode 53. 最大子序和(C语言)
53. 最大子序和Description给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。Analyze给定的函数如下:@param nums 一个数组@param numsSize 数组长度@return 最大和这题可以先求前缀和转变一下思路,当求出前缀和后问题就变成了在前缀和数组中原创 2020-05-21 19:58:01 · 242 阅读 · 0 评论 -
LeetCode 27. 移除元素(C语言)
27. 移除元素Description给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 *val *的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的原创 2020-05-21 19:57:42 · 215 阅读 · 0 评论 -
LeetCode 21. 合并两个有序链表(C语言)
21. 合并两个有序链表Description将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4Analyze给定的函数如下:@param l1 链表头结点(带值)@param l2 链表头结点(带值)@return 两个链表连接的新链表头结点(带值)既然两个链表都是有序链表,那么可以从两个链原创 2020-05-21 19:55:36 · 579 阅读 · 0 评论 -
LeetCode 14. 最长公共前缀(C语言)
14. 最长公共前缀Description编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。Analyze给定的函数如下:@param strs 字符串数组@param strsSize 字符原创 2020-05-21 19:52:26 · 543 阅读 · 2 评论 -
LeetCode 13. 罗马数字转整数(C语言)
13. 罗马数字转整数Description罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是原创 2020-05-21 19:51:08 · 587 阅读 · 0 评论 -
LeetCode 9. 回文数(C语言)
9. 回文数Description判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。Analyze给定函数如下:@param x 一个整数原创 2020-05-21 19:50:06 · 365 阅读 · 0 评论 -
LeetCode 8. 字符串转换整数(C语言)
8. 字符串转换整数 (atoi)Description请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响原创 2020-05-21 19:49:35 · 304 阅读 · 0 评论 -
LeetCode 7. 整数反转(C语言)
Description给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。Analyze理解题目很简单,就是将一个 int 类型范围内的整数反原创 2020-05-21 19:49:04 · 480 阅读 · 0 评论 -
LeetCode 2. 两数相加(C语言)
2. 两数相加Description给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807Analyze原创 2020-05-21 19:48:34 · 1366 阅读 · 0 评论 -
LeetCode 1. 两数之和(C语言)
1. 两数之和Description给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]Analyze可以直接暴力破解,遍历数组中每个元素与其它元素求它们的和,如果等原创 2020-05-21 19:48:02 · 259 阅读 · 0 评论 -
LeetCode 1103.分糖果 II(C语言)
1103.分糖果 IIDescription排排坐,分糖果。我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后原创 2020-05-21 19:47:02 · 337 阅读 · 0 评论 -
LeetCode 994.腐烂的橘子(C语言)
994.腐烂的橘子Description在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。Analyze题目很好理解,就是给定一个二维数组代表网格,每个网格中放一个整数,0,1或者2,含义如题,其中为2的网格可以腐蚀1所在的网格(前提是1在2的旁边),求经过多少时间所有原创 2020-05-21 19:44:45 · 613 阅读 · 0 评论