Leetcode 27 Remove Element

題目介紹

要求輸入:給定數組nums[],數字val
要求輸出:數組中不等於val的元素個數n,同時要求不等於數字val的n個元素放置在數組的前n個位置(不要求順序)
例子
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.

方法一

這道題只關注最後數組的前n個元素。因此很容易想到咱們遍歷整個數組,每當遇到不等於val的值的時候,咱們將計數的i值加一。同時咱們將這個元素賦值給nums[i],這樣就能夠保證,不等於val的n個元素完美佔據數組的前n個位置。
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;
}

方法二

當咱們遇到和等於val值的元素的時候,咱們將數組尾端的元素和此元素交換位置。以後減小一位遍歷長度。同時在下次遍歷中,咱們會從新檢查新swap過來的元素。數組

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];
            // reduce array size by one
            n--;
        } else {
            i++;
        }
    }
    return n;
}
相關文章
相關標籤/搜索