[Leetcode] 27. Remove Element 移除

2017-12-26  本文已影响0人  lijia069

Related Topics:[Array][Two Pointers]
Similar Questions:[Remove Duplicates from Sorted Array][Remove Linked List Elements][Move Zeroes]

题目:Given an array and a value, remove all instances of that value in-place and return the new length.
Do not allocate extra space for another array, you must do this by
modifying the input array in-place with O(1) extra memory.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.

思路

思路1:我们用一个变量用来计数,然后遍历原数组,如果当前的值和给定值不同,我们就把当前值覆盖计数变量的位置,并将计数变量加1。(我们习惯性去找与给定值相同的元素,换一种思路去找不同的元素操作起来更简单)

java解法1:

class Solution {
    public int removeElement(int[] nums, int val) {
        //两个指针
        int idx=-1;
        for(int i=0;i<nums.length;i++) {
            if(nums[i]!=val) {
                nums[++idx]=nums[i];
            }
        }
        return idx+1;
    }
}

思路2:看一个例子,nums = [4,1,2,3,5], val = 4。在这个例子中,如果使用解法1的思路,会产生很多不必要的复制过程。我们可以在这种情况下,可以通过用数组最后一个值覆盖当前与给定值相等的元素,并用一个变量记录实际数组的长度(此处减一)。最后返回该变量值即可

java解法2:

class Solution {
    public int removeElement(int[] nums, int val) {
        //遍历数组,用数组最后元素替换相同元素,并缩短数组长度
        int n=nums.length;
        int i=0;
        while(i<n) {
            if(nums[i]==val) {
                nums[i]=nums[n-1];
                n--;
            } else {
                i++;
            }
        }
        return n;
    }
}
上一篇下一篇

猜你喜欢

热点阅读