力扣刷题
文章平均质量分 51
LeetCode 101:和你一起你轻松刷题(C++)
呆萌宝儿姐
CSDN专家博主、阿里云开发者社区专家博主、51CTO社区专家博主、360书馆认证博主、知乎掘金B站等平台受邀作者。
如遇开发、程序等需求,博客首页下拉加入公众号,私信博主
展开
-
LeetCode刷题概览
从今天起,整理刷过的LeetCode,日更或者周更,欢迎大家查看 分类名 提名:题目链接原创 2021-11-27 14:14:53 · 1916 阅读 · 2 评论 -
LeetCode 154. 寻找旋转排序数组中的最小值 II
154. 寻找旋转排序数组中的最小值 II 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。 示例 1: 输入: [1,3,5] 输出: 1 示例 2: 输入: [2,2,2,0,1] 输出: 0 题解 官方最详细: https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-ar原创 2021-03-13 15:16:18 · 6271 阅读 · 15 评论 -
LeetCode 81. 搜索旋转排序数组 II
81. 搜索旋转排序数组 II 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 示例 1: 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 示例 2: 输入: nums = [2,5,6,0,0,1,2], target = 3 输出: false 进阶: 这原创 2021-03-12 16:56:24 · 4285 阅读 · 0 评论 -
LeetCode 680. 验证回文字符串
680. 验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符。 注意: 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。 题解 用双指针法从两边进行查找,当遇到不一样时候再用另一个检验函数分别检验左侧+1和右侧-1后的字符串是否为回文,在检验函数中,如果是就返回true,不是直接返回false 代码 class Solut原创 2021-03-11 18:10:21 · 4354 阅读 · 0 评论 -
LeetCode 633. 平方数之和
633. 平方数之和 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。 示例 1: 输入:c = 5 输出:true 解释:1 * 1 + 2 * 2 = 5 示例 2: 输入:c = 3 输出:false 示例 3: 输入:c = 4 输出:true 示例 4: 输入:c = 2 输出:true 示例 5: 输入:c = 1 输出:true 题解 右指针的初始化,实现剪枝,从而降低时间复杂度。设右指针为 x,左指针固定为 0,为了使 x的值尽可能接近原创 2021-03-11 18:05:05 · 4459 阅读 · 0 评论 -
LeetCode 76. 最小覆盖子串
76. 最小覆盖子串 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 1: 输入:s = "ADOBECODEBANC", t = "ABC" 输出:"BANC" 示例 2: 输入:s = "a", t = "a" 输出:"a" 题解:滑动窗口 本题使用滑动窗口求解,即两个指针 l 和 r 都是从最左端向最右端移动,且 l 的位置一定原创 2021-03-11 16:13:18 · 4117 阅读 · 0 评论 -
LeetCode 69. x 的平方根
69. x 的平方根 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 题解 下面这种方法可以很有效地求出根号 aa 的近似值:首先随便猜一个近似值 xx,然后不断令 xx 等于 xx 和 a/xa/x 的平均数,迭代个六七次后 xx 的值就已原创 2021-03-11 15:52:33 · 4110 阅读 · 1 评论 -
LeetCode 18. 早餐组合
LCP 18. 早餐组合 小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。 注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1 示例 1: 输入:staple = [10,20,5], drinks = [5,5,2], x = 15 输出:6 解释:小扣有原创 2021-03-06 09:51:07 · 4083 阅读 · 2 评论 -
142. 环形链表 II
142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 说明:不允许修改给定的链表。 进阶: 你是否可以使用 O(1) 空间解决此题? 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表节点 解释原创 2021-02-28 22:42:34 · 3960 阅读 · 1 评论 -
88. 合并两个有序数组
文章目录88. 合并两个有序数组示例 1:示例 2:题解注意代码 88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。 示例 1: 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n =原创 2021-02-28 22:31:40 · 4086 阅读 · 1 评论 -
167. 两数之和 II - 输入有序数组
class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { // 定义左右临界值 int l=0,r=numbers.size()-1; int sum; while(l<r) { sum=numbers[l]+numbers[r];原创 2021-02-28 22:20:29 · 3962 阅读 · 2 评论 -
665. 非递减数列
文章目录665. 非递减数列示例 1:示例 2:解题思路1.nums[i] 比 nums[i-2] 大,让nums[i-1]=nums[i]2.nums[i] 比 nums[i-2] 小,让nums[i] = nums[i-1]代码 665. 非递减数列 这题在LeetCode中属于容易(原谅我一开始小看了),但还是被虐了 T^T 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <原创 2021-02-28 16:59:08 · 3982 阅读 · 1 评论 -
406. 根据身高重建队列
文章目录406. 根据身高重建队列示例 1:示例 2:解题思路代码 406. 根据身高重建队列 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[原创 2021-02-28 15:06:25 · 3923 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
方法一: 交易次数不受限,如果可以把所有的上坡全部收集到,一定是利益最大化的,就是在超过当前进价时,达到波峰时候卖出去 public int maxProfit(int[] arr) { if (arr == null || arr.length <= 1) return 0; int ans = 0; for (int i = 1; i < arr.length; i++) { if (arr[i]原创 2021-02-28 11:08:11 · 3893 阅读 · 1 评论 -
763. 划分字母区间
763. 划分字母区间 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 示例: 输入:S = "ababcbacadefegdehijhklij" 输出:[9,7,8] 解释: 划分结果为 “ababcbaca”, “defegde”, “hijhklij”。 每个字母最多出现在一个片段中。 像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。 解题思路 用 la原创 2021-02-27 22:11:10 · 3884 阅读 · 1 评论 -
452. 用最少数量的箭引爆气球
452. 用最少数量的箭引爆气球 题目 在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。 一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们原创 2021-02-26 19:47:35 · 3898 阅读 · 1 评论 -
605. 种花问题
605. 种花问题 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。 示例 1: 输入:flowerbed = [1,0,0,0,1], n = 1 输出:true 示例 2: 输入:flowerbed = [1原创 2021-02-26 16:44:18 · 3929 阅读 · 1 评论 -
435. Non-overlapping Intervals (Medium)
435. Non-overlapping Intervals (Medium) 题目描述 给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠。 输入输出样例 输入是一个数组,数组由多个长度固定为 2 的数组组成,表示区间的开始和结尾。输出一个 整数,表示需要移除的区间数量。 Input: [[1,2], [2,4], [1,3]] Output: 1 在这个样例中,我们可以移除区间 [1,3],使得剩余的区间 [[1,2], [2,4]] 互不重叠。 题解 在选择要保留区间时,原创 2021-02-26 16:16:50 · 3941 阅读 · 1 评论 -
455. Assign Cookies (Easy)
455. Assign Cookies (Easy) 题目描述 有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。每个孩子只能吃 最多一个饼干,且只有饼干的大小大于孩子的饥饿度时,这个孩子才能吃饱。求解最多有多少孩 子可以吃饱。 输入输出样例 输入两个数组,分别代表孩子的饥饿度和饼干的大小。输出最多有多少孩子可以吃饱的数 量。 Input: [1,2], [1,2,3] Output: 2 在这个样例中,我们可以给两个孩子喂 [1,2]、[1,3]、[2,3] 这三种组合的任意一种。 题解原创 2021-02-26 12:31:52 · 3968 阅读 · 1 评论 -
135. Candy (Hard)
135. Candy (Hard) 题目描述 一群孩子站成一排,每一个孩子有自己的评分。现在需要给这些孩子发糖果,规则是如果一 个孩子的评分比自己身旁的一个孩子要高,那么这个孩子就必须得到比身旁孩子更多的糖果;所 有孩子至少要有一个糖果。求解最少需要多少个糖果。 输入输出样例 输入是一个数组,表示孩子的评分。输出是最少糖果的数量。 Input: [1,0,2] Output: 5 在这个样例中,最少的糖果分法是 [2,1,2]。 解题思路 我们只需要简单的两次遍历即可:把所有孩子的糖果数初始化为 1; 先原创 2021-02-26 11:19:13 · 3862 阅读 · 0 评论