雙指標應用之移除元素

2021-10-19 08:58:33 字數 1394 閱讀 1640

移除元素

給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須僅使用 o(1) 額外空間並 原地 修改輸入陣列。

元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。

示例 1:

給定 nums = [3,2,2,3], val = 3,

函式應該返回新的長度 2, 並且 nums 中的前兩個元素均為 2。

你不需要考慮陣列中超出新長度後面的元素。

示例 2:

給定 nums = [0,1,2,2,3,0,4,2], val = 2,

函式應該返回新的長度 5, 並且 nums 中的前五個元素為 0, 1, 3, 0, 4。

注意這五個元素可為任意順序。

你不需要考慮陣列中超出新長度後面的元素。

分析:

解法1) 雙指標覆蓋

[3,2,1,3] val = 3

使用額外指標 記錄要覆蓋的索引位置

索引3 0 [3,2,1,3]

2 1 [2,2,1,3]

1 2 [2,1,1,3]

3[0,1,2,2,3,0,4,2] val = 2

索引初始值是0

元素 索引 陣列

0 1 [0,1,2,2,3,0,4,2]

1 2 [0,1,2,2,3,0,4,2]22

3 3 [0,1,3,2,3,0,4,2]

0 4 [0,1,3,0,3,0,4,2]

4 5 [0,1,3,0,4,0,4,2]

2

public static int removeelement(int nums, int val) 

}// 新陣列的長度大小

return index;

}

解法2)直接替換

[0,1,2,2,3,0,4,2] val=2

[0,1,2,2,3,0,4|,2] len=7

[0,1,4,2,3,0|,2,2] len=6

[0,1,4,0,3|,2,2,2] len=5

index=0 len=8

判斷當前值 是否需要被刪除

如果需要 進行替換 替換最後乙個位置的元素

nums[index] = nums[len-1]

len–;

index–; // 替換回來的值 仍要進行判斷

index++

當index >= len 迴圈結束

public static int removeelement1(int nums, int val) 

index++;

}}

雙指標 移除元素

題目描述 給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。不要使用額外的陣列空間,你必須僅使用 o 1 額外空間並原地修改輸入陣列。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。方法一 時間複雜度o n 2 class...

LeetCode 移除元素(雙指標)

給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2,3 ...

陣列 27 移除元素(雙指標法)

移除元素 給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。不要使用額外的陣列空間,你必須僅使用 o 1 額外空間並 原地 修改輸入陣列。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2...