27 remove element

| 分类 leetcode  | 标签 array 

Given an array and a value, remove all instances of that value in place and return the new length.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.

我的思路是遍历数组,遇到nums[i]==val 则交换最右侧元素与当前元素,同时i--。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 public int removeElement(int[] nums, int val) {
        int n = nums.length;
        int hi = n - 1;
        for(int i = 0; i <= hi; i++){
            if(nums[i] == val){
                swap(nums,i,hi--);
                i--;
            }
        }
        return hi+1;
    }
     private void swap(int[] nums,int i, int j){
            if(i == j) return;
            nums[i] ^= nums[j];
            nums[j] ^= nums[i];
            nums[i] ^= nums[j];
        }

most votes

byrantos22 这个真的是很简洁,标题是very elegant!

1
2
3
4
5
6
7
8
9
10
11
int removeElement(vector<int>& nums, int val)
{
    size_t idx(0);
    for (const int num : nums)  
{ if ( num != val) nums[idx++] = num; }

<span class="k">return</span> <span class="n">idx</span><span class="o">;</span>

}

java版本:

1
2
3
4
5
6
7
8
9
10
11
12
public int removeElement(int[] nums, int val) {
        if(nums == null || nums.length == 0) return;
        int n = nums.length;
        int idx = 0;
        for(int i = 0; i < n; i++){
            if(nums[i] != val){
                nums[idx++]=nums[i];
            }
        }
        return idx;

<span class="o">}</span><span class="w">


上一篇     下一篇