做网站公司徐汇,免费免费建站,域名会跳转怎么进原网站,专业网页制作室leetcode面试经典150题第一弹
一、合并俩个有序数组(难度#xff1a;简单)
题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2#xff0c;另有两个整数 m 和 n #xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中#xff0c;使合并…leetcode面试经典150题第一弹
一、合并俩个有序数组(难度简单)
题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中使合并后的数组同样按非递减顺序排列。 注意最终合并后数组不应由函数返回而是存储在数组 nums1 中。为了应对这种情况nums1 的初始长度为 m n其中前 m 个元素表示应合并的元素后 n 个元素为 0 应忽略。nums2 的长度为 n 。 解题思路 直接合并后排序,最直观的方法是先将数组nums2放进数组nums1的尾部然后直接对整个数组进行排序。 1、splice直接改变原数组可用于删除、插入、替换 2、使用sort进行排序 sort((a, b) a - b)为正序即从小到到大 sort((a, b) a - b)为倒叙即从大到小 代码示例
/*** param {number[]} nums1* param {number} m* param {number[]} nums2* param {number} n* return {void} Do not return anything, modify nums1 in-place instead.*/
var merge function(nums1, m, nums2, n) {nums1.splice(m, nums1.length - m, ...nums2);nums1.sort((a, b) a - b);
};结果 二、移除元素(难度简单)
题目 给你一个数组 nums 和一个值 val你需要原地移除所有数值等于 val 的元素并返回移除后数组的新长度。 不要使用额外的数组空间你必须仅使用O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 解题思路 1、js中splice可以直接改变原数组直接使用splice删除 2、在ES6中有更简单直接的方法去重Array.from(new Set(arr))但是这样会改变原数组导致leetCode测试用例不通过。题目中要求原地修改数组 代码示例
/*** param {number[]} nums* param {number} val* return {number}*/
var removeElement function(nums, val) {for(let i 0; i nums.length; i) {if(nums[i] val) {nums.splice(i, 1)i--}}
};
结果 三、删除有序数组中的重复项(难度简单)
题目 给你一个 非严格递增排列 的数组 nums 请你 原地 删除重复出现的元素使每个元素 只出现一次 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k 你需要做以下事情确保你的题解可以被通过 更改数组 nums 使 nums 的前 k 个元素包含唯一元素并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。 返回 k 。 解题思路 我在这道题的解题中使用了ES6中的new Map()利用map每个键都是唯一的特性去重 1、ES6中map,是一种有序的键值对集合其中每个键都是唯一的。它可以存储任何类型的值作为键或值包括原始类型和对象引用。 2、map.set(name,xiaobaigis),添加键值对 3、map.has(5)判断是否有指定键 代码示例
/*** param {number[]} nums* return {number}*/
var removeDuplicates function(nums) {let newMap new Map()for(let i nums.length; i 0; i-- ) {if(newMap.has(nums[i])) {nums.splice(i, 1)} else {newMap.set(nums[i])}}
};结果 四、删除有序数组中的重复项(难度中等)
题目 给你一个有序数组 nums 请你原地删除重复出现的元素使得出现次数超过两次的元素只出现两次 返回删除后数组的新长度。 不要使用额外的数组空间你必须在原地修改输入数组 并在使用O(1) 额外空间的条件下完成。 解题思路 1、因为是个有序数组所以如果相同的元素必定在一起判断如果有三个相邻元素相同则删掉一个元素 2、splice直接改变原数组可用于删除、插入、替换 代码示例
/*** param {number[]} nums* return {number}*/
var removeDuplicates function(nums) {if(nums.length 3) {return;}for(let i 2; i nums.length; i) {if(nums[i] nums[i-1] nums[i] nums[i-2]) {nums.splice(i, 1)i--}}
};结果 欢迎关注我的个人公众号javascript艺术