27. 移除元素
阿新 • • 發佈:2018-12-19
題目:移除元素
給定一個數組 nums 和一個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。
示例 1: 給定 nums = [3,2,2,3], val = 3, 函式應該返回新的長度 2。 示例 2: 給定 nums = [0,1,2,2,3,0,4,2], val = 2, 函式應該返回新的長度 5。
思路:
1.判斷是否為空。
2.建立兩個指標,i 為慢指標,j 為快指標。
3.快指標從 0 開始遍歷,當快指標 j 等於 val 時,繼續遍歷。
4.當快指標 j 不等於 val 時,將快指標 j 對應的元素賦予慢指標 i,然後 i++。遍歷完畢,慢指標對應的所有元素即為新陣列。
注意點:
1.遍歷時快指標從舊陣列下標 0 開始。
2.慢指標 i 先賦值,後移位。
程式碼:
public class demo27 { public static void main(String[] args) { int nums[] = {1,1,2,2,3}; int len = new Solution27().removeElement(nums, 1); System.out.println(len); for (int i = 0; i < len; i++) { System.out.println(nums[i]); } } } class Solution27 { public int removeElement(int[] nums, int val) { // 1.判斷是否為空 if (nums.length == 0) { return 0; } // 2.建立兩個指標,i 為慢指標,j 為快指標 int i = 0; // 3.快指標從 0 開始遍歷,當快指標 j 等於 val 時,繼續遍歷 // 4.當快指標 j 不等於 val 時,將快指標 j 對應的元素賦予慢指標 i,然後 i++。遍歷完畢,慢指標對應的所有元素即為新陣列 for (int j = 0; j < nums.length; j++) { if (nums[j] != val) { nums[i] = nums[j]; i++; } } return i; } }