![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法题解
记录力扣算法题解记录。
凡尘向天
这个作者很懒,什么都没留下…
展开
-
303. 区域和检索 - 数组不可变
给定一个整数数组 nums,处理以下类型的多个查询:计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] + num.原创 2022-03-16 10:44:20 · 155 阅读 · 0 评论 -
228. 汇总区间
给定一个 无重复元素 的 有序 整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。列表中的每个区间范围 [a,b] 应该按如下格式输出:“a->b” ,如果 a != b“a” ,如果 a == b示例1输入:nums = [0,1,2,4,5,7]输出:["0->2","4->5","7"]解释:区间范围是:[0,2.原创 2022-03-16 09:35:53 · 166 阅读 · 0 评论 -
283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例1输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例2输入: nums = [0]输出: [0]题解1 var moveZeroes = function(nums){ let len = nums.length,left=0,right = 0; for(let i =0;i<.原创 2022-03-15 13:46:35 · 376 阅读 · 0 评论 -
219. 存在重复元素 II
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。示例1输入:nums = [1,2,3,1], k = 3输出:true示例2输入:nums = [1,0,1,1], k = 1输出:true示例3输入:nums = [1,2,3,1,2,3], k = 2输出:false题解.原创 2022-03-14 16:46:46 · 94 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。示例1输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]示例2输入:nums = [1,1]输出:[2]题解var findDisappearedNumbers = function(nums) { nums.sort((a,b)=>a-b) let l.原创 2022-03-14 10:27:49 · 384 阅读 · 0 评论 -
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例1输入:strs = ["flower","flow","flight"]输出:"fl"示例2输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。题解var longestCommonPrefix=function(strs){ if(strs.length===0) return '' let prefix = strs[0].原创 2022-03-02 17:40:58 · 155 阅读 · 0 评论 -
对角线遍历
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。示例1输入:mat = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,4,7,5,3,6,8,9]示例2输入:mat = [[1,2],[3,4]]输出:[1,2,3,4]题解 var findDiagonalOrder = function(mat){ let backArr = [],l=0,k=0,rowLen = mat.length-1,.原创 2022-03-01 15:34:41 · 138 阅读 · 0 评论 -
力扣零矩阵
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零示例1输入:[ [1,1,1], [1,0,1], [1,1,1]]输出:[ [1,0,1], [0,0,0], [1,0,1]]示例2输入:[ [0,1,2,0], [3,4,5,2], [1,3,1,5]]输出:[ [0,0,0,0], [0,4,5,0], [0,3,1,0]]题解var setZeroes = function(m.原创 2022-03-01 10:08:25 · 158 阅读 · 0 评论 -
力扣旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?示例1给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例2给定 matrix =[ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], .原创 2022-02-28 13:48:31 · 177 阅读 · 0 评论 -
二维数组合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例1输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2输入:intervals = [[1,4],[.原创 2022-02-28 10:03:14 · 597 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 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示例4输入: nums = [1,3,5,6], ta.原创 2022-02-15 16:25:10 · 252 阅读 · 0 评论 -
寻找数组的中心索引
给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。示例1输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:中心下标是 3 。左侧数之和 sum = nums[0.原创 2022-02-15 15:34:35 · 172 阅读 · 0 评论 -
455. 分发饼干(贪心算法)
题目这里是引用示例1输入: g = [1,2,3], s = [1,1]输出: 1解释: 你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。所以你应该输出1。示例2输入: g = [1,2], s = [1,2,3]输出: 2解释: 你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。你拥有的饼干数量和尺寸都足以让所有孩子满足。所以你应该输出2.题解/** *.原创 2021-08-03 16:33:26 · 171 阅读 · 0 评论 -
268. 丢失的数字
题目数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?示例1输入:[3,0,1]输出:2示例2输入:[9,6,4,2,3,5,7,0,1]输出:8题解1var missingNumber = function(nums) { nums.sort((a,b)=>a-b) let len =nums.length for (let i in nums){ if(.原创 2021-08-04 11:30:09 · 68 阅读 · 0 评论 -
350. 两个数组的交集 II
题目给定两个数组,编写一个函数来计算它们的交集。输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。示例1输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例2输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]题解/** * @param {number[]} nums1 * @param {number[]} nums2 *.原创 2021-08-03 14:17:55 · 55 阅读 · 0 评论 -
217. 存在重复元素
题目给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例1输入: [1,2,3,1]输出: true示例2输入: [1,2,3,4]输出: false题解/** * @param {number[]} nums * @return {boolean} */var containsDuplicate = function(nums) { nums = num.原创 2021-08-02 16:47:22 · 91 阅读 · 0 评论 -
389. 找不同
题目给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例1输入:s = "abcd", t = "abcde"输出:"e"解释:'e' 是那个被添加的字母。示例2输入:s = "", t = "y"输出:"y"示例3输入:s = "a", t = "aa"输出:"a"示例4输入:s = "ae", t = "aea"输出:"a"题解/** *.原创 2021-08-03 15:07:34 · 74 阅读 · 0 评论 -
力扣 169. 多数元素
题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1输入:[3,2,3]输出:3示例 1输入:[2,2,1,1,1,2,2]输出:2题解/** * @param {number[]} nums * @return {number} */var majorityElement = function(nums) { let targe.原创 2021-08-02 16:20:03 · 225 阅读 · 0 评论 -
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 = 3输出:[1,2,2,3,5,6]示例2输入:nums1 = [.原创 2021-08-02 16:23:59 · 49 阅读 · 0 评论 -
506. 相对名次
题目给出 N 名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”,“银牌” 和“ 铜牌”(“Gold Medal”, “Silver Medal”, “Bronze Medal”)。(注:分数越高的选手,排名越靠前。)来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/relative-ranks著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例1输入: [5, 4,.原创 2021-08-03 17:35:43 · 71 阅读 · 0 评论 -
414. 第三大的数
题目给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数示例1输入:[3, 2, 1]输出:1解释:第三大的数是 1 。示例2输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。示例3输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。题解/** * @param.原创 2021-08-03 16:01:57 · 65 阅读 · 0 评论 -
349. 两个数组的交集
题目给定两个数组,编写一个函数来计算它们的交集。示例1输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例2输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]题解/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */var intersection = function(num.原创 2021-08-03 13:16:55 · 60 阅读 · 0 评论 -
561. 数组拆分 I
题目给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。返回该 最大总和 。示例1输入:nums = [1,4,3,2]输出:4解释:所有可能的分法(忽略元素顺序)为:1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 32. (1, 3), (2, 4) -> m.原创 2021-08-04 11:01:20 · 95 阅读 · 0 评论 -
242. 有效的字母异位词
题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例1输入: s = "anagram", t = "nagaram"输出: true示例2输入: s = "rat", t = "car"输出: false题解/** * @param {string} s * @param {string} t * @return {boolean} *.原创 2021-08-02 17:28:10 · 57 阅读 · 0 评论 -
268. 丢失的数字
题目给定一个包含 [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 中。示.原创 2021-08-03 09:34:14 · 83 阅读 · 0 评论 -
628. 三个数的最大乘积
题目给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例1输入:nums = [1,2,3]输出:6示例2输入:nums = [1,2,3,4]输出:24示例3输入:nums = [-1,-2,-3]输出:-6题解/** * @param {number[]} nums * @return {number} */var maximumProduct = function(nums) { nums.sort((.原创 2021-08-20 10:54:23 · 69 阅读 · 0 评论 -
二分查找基本概念
-基础版本/** * @param {number[]} nums * @param {number} target * @return {number} */var search = function(nums, target) { let start = 0,end = nums.length-1 while(start<=end){ const mid = Math.floor((end - start) / 2) + start; // 防止溢出 i原创 2021-11-05 10:10:02 · 115 阅读 · 0 评论 -
26. 删除有序数组中的重复项(双指针)
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例1输入:nums = [1,1,2]输出.原创 2021-09-14 10:58:16 · 156 阅读 · 0 评论