LeetCode-數組-刪除元素

題目描述

給定一個數組 nums 和一個值 val,你須要原地移除全部數值等於 val 的元素,返回移除後數組的新長度。java

不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。數組

元素的順序能夠改變。你不須要考慮數組中超出新長度後面的元素。spa

解題思路

本題解題思路與上一篇的 刪除有序數組重複元素相似,以下所示:
  • 設定左右指針 i, j,變量 count 用於計數
  • 指針 i 從左向右移動,判斷元素是否等於 val;當於 val 相等時 count--, 並移動指針 j,當於 val 不等時指針 i 繼續向右移動
  • 當指針 j 移動時,判斷元素是否等於 val; 當於 val 相等時 count-- 繼續移動指針 j, 當不等時互換 i, j 元素並繼續移動指針 i
  • 當指針 i,j 交匯時完成退出輪詢

可見以下圖示:指針

刪除元素

實現

public int removeElement(int[] nums, int val) {
    int i = 0, count = nums.length, j = count;

    while (true) {
        while (i < j) {
            if (nums[i] == val) {
                count--;
                break;
            } else {
                if (i + 1 == j) {
                    break;
                }

                i++;
            }
        }

        while (j > i) {
            j--;

            if (j == i) {
                break;
            }

            if (nums[j] == val) {
                count--;
            } else {
                nums[i] = nums[j];
                i++;
                break;
            }
        }

        if (i >= j) {
            break;
        }

    }

    return count;
}
相關文章
相關標籤/搜索