LeetCode

最近在刷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 }
 
原文地址:https://www.cnblogs.com/alhh/p/9917149.html