美文网首页
[Leetcode] 27. Remove Element 移除

[Leetcode] 27. Remove Element 移除

作者: lijia069 | 来源:发表于2017-12-26 17:29 被阅读0次

    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;
        }
    }
    

    相关文章

      网友评论

          本文标题:[Leetcode] 27. Remove Element 移除

          本文链接:https://www.haomeiwen.com/subject/deyjgxtx.html