Fork me on GitHub

Remove-Element

Question

Analysis

给定一个数组,移除其中的指定值value,并返回移除掉指定值后新数组的长度。

Answers

  • Two pointers
    通过构造两个指针i、j,当nums[j]!=val时,将nums[j]赋给nums[i];当nums[j]=val时,直接跳过这个值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public int removeElement(int[] nums,int val){
    int i=0;
    for (int j=0;j<nums.length;j++){
    if (nums[j] != val){
    nums[i]=nums[j];
    i++;
    }
    }
    return i;
    }
  • Two Pointers - when elements to remove are rare
    当i的值小于n时,如果nums[i]=val,则将nums[n-1]也就是数组的最后一个值赋给nums[¡],之后n–,将数组最后一位去掉,等同于去掉与val相等的那个值,之后进行的迭代会将原数组的最后一位与val进行比较,循环下去;如果nums[i]!=val,则i++,将比较位后移一位,一直比较到数组的最后一位,最终输出n即可。

    public int removeElement(int[] nums;int val){
    int i=0;
    int n=nums.length;
    while (i<n){
      if(nums[i]=val){
        nums[i]=nums[n-1];
        n--;
      }
      else{
        i++;
      }
    }
    return n;
    }