LeetCode26 刪除有序陣列中的重複項

2021-10-05 17:32:48 字數 1787 閱讀 2078

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。

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

示例 1:

給定陣列 nums = [1,1,2],

函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。

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

示例 2:

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

函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4。

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

思路一

單指標+正序遍歷

1.指標i開始指向列表的開始

2.從下標1處開始遍歷列表,當遍歷元素與指標處元素不相等時,指標+1,將遍歷元素賦值給移動後指標,若兩者相等,指標不動,繼續遍歷列表

3.遍歷完成後,返回i+1,既是不重複元素個數

**如下:

def

solution

(nums):if

not nums:

return

none

i =0for j in

range(1

,len

(nums)):

if nums[i]

!= nums[j]

: i +=

1 nums[i]

= nums[j]

return i+

1

思路二

既然無法正向遍歷時刪除元素,可以反向遍歷

1.從列表末尾開始遍歷元素,與前一項對比

2.如果兩者相等,刪除該位置元素,不相等則繼續遍歷

3.遍歷完成後返回列表長度

**如下:

def

soultion

(nums)

:for i in

range

(len

(nums)-1

,0,-

1):if nums[i]

== nums[i-1]

: nums.pop(i)

return

len(nums)

思路三

雙指標,前乙個指標記錄不同元素位置,後乙個指標尋找不同元素

1.初始化指標p和q,分別指向列表的0號元素和1號元素

2.判斷兩者是否相等,如果想等,q後移一位,不相等,將q指向的元素賦給p+1號元素,p和q同時後移一位

3.當q指標到達列表最後乙個元素時,結束比較,返回p+1

**如下:

if

not nums:

return

none

p =0

q =0

while q <

len(nums)

:if nums[q]

== nums[p]

: q +=

1else

: nums[p+1]

= nums[q]

p +=

1 q +=

1return p +

1

LeetCode 26 刪除排序陣列中的重複項

給定乙個排序陣列,你需要在原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為1...

leetcode26 刪除排序陣列中的重複項

給定乙個排序陣列,你需要在原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成 示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為1...

LeetCode 26刪除排序陣列中的重複項

給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為1,2...