給定一個數組 nums 和一個值 val,你須要原地移除全部數值等於 val 的元素,返回移除後數組的新長度。java
不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。數組
元素的順序能夠改變。你不須要考慮數組中超出新長度後面的元素。spa
本題解題思路與上一篇的
刪除有序數組重複元素
相似,以下所示:
可見以下圖示:指針
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; }