1. 程式人生 > >27. 移除元素

27. 移除元素

題目:移除元素

給定一個數組 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;
    }
}