最近在刷LeetCode题 为了心中的一个小秘密,在考虑是用英文还是中文的时候纠结了,最后为了省篇幅还是选择了中文
1.从排序数组中删除重复项
问题:给定排序的数组nums,就地删除重复项,使每个元素只出现一次并返回新的长度。不要为另一个数组分配额外的空间,你必须这样做修改输入数组就地用O(1)额外的内存。
例1: 鉴于nums = [1,1,2], 您的函数应返回长度= 2,与前两个元素nums是1和2分别。 你返回的长度超出了什么并不重要。
解:
/** * @param {number[]} nums * @return {number} */ var removeDuplicates = function(nums) {
let len = nums.length
let a =0
for(let i=0;i<len;i++){
if(nums[i]!== nums[a]){
a++;
nums[i] = nums[a]
}
}
return a+1 };
2.给定一个数组,将数组向右旋转k步,其中 k 为非负数
例子:
输入: [1,2,3,4,5,6,7]和k = 3 输出: [5,6,7,1,2,3,4] 说明: 向右旋转1步:向右[7,1,2,3,4,5,6] 旋转2步:向右[6,7,1,2,3,4,5] 旋转3步:[5,6,7,1,2,3,4]
知识点:这里着重了解unshift和pop方法的使用 unshift:向数组开头添加一个或更多元素,返回新的长度 pop:用于删除并返回数组的最后一个元素 注意这两个方法 会修改原数组的值
解:
/** *@param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */ var rotate = function(nums, k) { while(k>0){ nums.unshift(nums.pop()) k-- } }
注意:if满足条件后只执行一次 ,while只要满足条件会不停的执行
3.给定一个整数数组,查找数组是否包含任何重复项。如果数组中至少出现两次值,则函数应返回true,如果每个元素都是不同的,则返回false。
例子:
输入: [1,2,3,1] 输出: true
解:
/** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) {
nums.sort()
let len = nums.length
for(let i=0;i<len;i++){
if(nums[i] == nums[i+1]{
return true}
}
}
return false }