LeetCode Array Easy 27. Remove Element 解题

Given an array nums and a value val, 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.

Example 1:

Given nums = [3,2,2,3], val = 3,

Your function should return length = 2, with the first two elements of nums being 2.

It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,1,2,2,3,0,4,2], val = 2,

Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4.

Note that the order of those five elements can be arbitrary.

It doesn't matter what values are set beyond the returned length.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

Internally you can think of this:

// nums is passed in by reference. (i.e., without making a copy)
int len = removeElement(nums, val);

// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

我的解题思路:遍历整个数组,逐个检查每个值是否与要求移除的值相同,如果相同,则将后面的值依次向前移动一个位置,并从当前位置重新开始检查。

遍历结束之后再检查最后一个位置的数是不是要求移除的值,如果是 返回值减1;

看代码:

public class Solution {
    public int RemoveElement(int[] nums, int val) {
        if(nums.Length == 0)
            return 0;
        int i,j,length=nums.Length;
        for(i = 0; i < length; i++){
            if(nums[i] == val){
                for(j = i; j < length - 1; j++){
                    nums[j] = nums[j+1];
                }
                length--;
                i--;//i递减1之后,从当前位置重新检查
            }
        }
        if(length !=0 && nums[length-1] == val)//检查最后一个数字是不是需要移除的值
            length--;
        return length;
    }
}

原文地址:https://www.cnblogs.com/c-supreme/p/8884122.html