LeeCode探索初级算法 | | JavaScript实现删除排序数组中的重复项

题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

1. 常规解法


var removeDuplicates = function(nums) {
//遍历数组
  for(var i = 0;i<nums.length;i++){
//如果i与i+1相等,则进行splice截取与i右相邻的一个值,同时i自减1一位
    if(nums[i] == nums[i+1]){
      nums.splice(i,1);
      i--;
    }    
  }
  //最后返回数组长度
  return nums.length;
};

2. 双指针解法

var removeDuplicates = function(nums) {
  //如果数组非空并且大于0,可进行下一步
   if(nums != 0 || nums.length >0);
   //设立p和q两个指针,p从0开始,q从1开始
  var p = 0;
  var q = 1;
 //使用while循环,当q小于数组长度时执行循环体内容
  while(q < nums.length){
 
        if(nums[p] != nums[q]){       
//若q值与p值不相等,则将q所在的值与p+1处的值进行交换,即覆盖重复数值           
        if(q - p > 1){
             nums[p + 1] = nums[q];
           }
//q值与p+1的值交换完毕后,p自增一位到达p+1处
          p++;
        }
//每循环一次,q值向右移动一位进行
      q++;
  }
 //最后返回数组长度,由于q开始的值为1,若返回值为q,数组长度较短时还可以运行成功,而一旦数组长度超过一定长度则会导致错误,p的理由同上
    return p+1;
};

你可能感兴趣的:(前端杂学,算法学习)