Leetcode算法题
Leetcode算法题
英雄哪里出来_
这里是一个技术博客。 C/C++,数据结构,计算机网络,操作系统,数据库,C++造轮子系列,Leedcode算法题的知识总结可以到主页左侧的“分类专栏”查阅。
感谢你的关注。
展开
-
滑动窗口(leetcode 1658)
给你一个整数数组 nums 和一个整数 x。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。如果可以将 x 恰好 减到 0 ,返回 最小操作数;否则,返回 -1。示例 1:输入:nums = [1,1,4,2,3], x = 5输出:2解释:最佳解决方案是移除后两个元素,将 x 减到 0。原创 2023-10-31 15:51:29 · 27 阅读 · 0 评论 -
滑动窗口(leetcode 1004)
给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数。示例 1:输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3输出:10。原创 2023-10-31 15:25:50 · 22 阅读 · 0 评论 -
滑动窗口(leetcode 3)
示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。原创 2023-10-31 15:04:41 · 18 阅读 · 0 评论 -
滑动窗口(leetcode 209)
找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。原创 2023-10-31 12:41:20 · 100 阅读 · 0 评论 -
位运算(面试题17.19)
给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字。你能在 O(N) 时间内只用 O(1) 的空间找到它们吗?以任意顺序返回这两个数字均可。示例 1:输入: [1]输出: [2,3]示例 2:输入: [2,3]输出: [1,4]原创 2023-10-29 19:26:30 · 26 阅读 · 0 评论 -
位运算(leetcode137)
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。请你找出并返回那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。示例 1:输入:nums = [2,2,3,2]输出:3示例 2:输入:nums = [0,1,0,1,0,1,99]输出:99。原创 2023-10-29 19:18:57 · 19 阅读 · 0 评论 -
位运算(leetcode371)
示例 1:输入:a = 1, b = 2输出:3示例 2:输入:a = 2, b = 3输出:5。原创 2023-10-29 18:56:38 · 20 阅读 · 0 评论 -
位运算(leetcode268)
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。示例 1:输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 2:输入:nums = [0,1]输出:2解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。原创 2023-10-29 18:46:00 · 25 阅读 · 0 评论 -
位运算(面试题01.01)
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = “leetcode”输出: false示例 2:输入: s = “abc”输出: true。原创 2023-10-29 16:20:34 · 116 阅读 · 0 评论 -
双指针(Leetcode 202)
202,快乐数编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true;不是,则返回 false。示例 1:输入:n = 19输出:true解释:示例 2:输入:n = 2输出:false。原创 2023-10-28 16:22:05 · 26 阅读 · 0 评论 -
双指针(Leetcode 11)
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输入:height = [1,1]输出:1。原创 2023-10-28 16:20:28 · 19 阅读 · 0 评论 -
双指针(Leetcode 611)
给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。示例 1:输入: nums = [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3示例 2:输入: nums = [4,2,3,4]输出: 4。原创 2023-10-28 16:18:39 · 26 阅读 · 0 评论 -
双指针(剑指offer57)
LCR 179. 查找总价格为目标值的两个商品购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。示例 1:输入:price = [3, 9, 12, 15], target = 18输出:[3,15] 或者 [15,3]示例 2:输入:price = [8, 21, 27, 34, 52, 66], target = 61输出:[27,34] 或者 [34,27]原创 2023-10-28 16:16:55 · 38 阅读 · 1 评论 -
双指针(Leetcode 15)
三数之和给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= j、i!= k 且 j!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。原创 2023-10-28 16:13:43 · 90 阅读 · 1 评论 -
双指针(Leetcode 18)
a、b、c 和 d 互不相同你可以按 任意顺序 返回答案。示例 1:输入:nums = [1,0,-1,0,-2,2], target = 0输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]示例 2:输入:nums = [2,2,2,2,2], target = 8输出:[[2,2,2,2]]原创 2023-10-28 16:10:38 · 24 阅读 · 1 评论 -
双指针(Leetcode 1089)
给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。示例 1:输入:arr = [1,0,2,3,0,4,5,0]输出:[1,0,0,2,3,0,0,4]解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]示例 2:输入:arr = [1,2,3]输出:[1,2,3]原创 2023-10-27 19:49:15 · 19 阅读 · 1 评论 -
双指针(Leetcode 283)
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0]原创 2023-10-27 19:21:00 · 25 阅读 · 1 评论 -
二分查找(剑指offer 53)
某班级 n 位同学的学号为 0 ~ n-1。点名结果记录于升序数组 records。假定仅有一位同学缺席,请返回他的学号。示例 1:输入: records = [0,1,2,3,5]输出: 4示例 2:输入: records = [0, 1, 2, 3, 4, 5, 6, 8]输出: 7。原创 2023-10-27 18:41:07 · 77 阅读 · 1 评论 -
二分查找(leetcode 153)
给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素。你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。示例 1:输入:nums = [3,4,5,1,2]输出:1解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。示例 2:输入:nums = [4,5,6,7,0,1,2]输出:0解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。原创 2023-10-27 18:38:13 · 27 阅读 · 1 评论 -
二分查找(leetcode 162)
峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入:nums = [1,2,1,3,5,6,4]输出:1 或 5。原创 2023-10-27 18:35:29 · 21 阅读 · 1 评论 -
二分查找(leetcode 852)
你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。示例 1:输入:arr = [0,1,0]输出:1示例 2:输入:arr = [0,2,1,0]输出:1示例 3:输入:arr = [0,10,5,2]输出:1。原创 2023-10-27 18:33:46 · 20 阅读 · 1 评论 -
二分查找(leetcode 69)
给你一个非负整数 x ,计算并返回 x 的 算术平方根。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5。示例 1:输入:x = 4输出:2示例 2:输入:x = 8输出:2解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。原创 2023-10-27 18:32:04 · 42 阅读 · 1 评论 -
二分查找(leetcode 35)
请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4。原创 2023-10-27 18:30:05 · 22 阅读 · 1 评论 -
二分查找(leetcode 34)
在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6。原创 2023-10-27 18:27:05 · 27 阅读 · 1 评论 -
二分查找(leetcode 704)
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。链接:https://leetcode-cn.com/problems/binary-search。输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。解释: 2 不存在 nums 中因此返回 -1。来源:力扣(LeetCode)原创 2023-10-27 18:18:42 · 136 阅读 · 1 评论