從排序陣列中刪除重複項

2021-09-29 18:05:15 字數 1500 閱讀 5085

我的**:

from typing import list

defppo(nums:list[

int])-

> list[

int]

: lenth =

len(nums)

if lenth ==

0or lenth ==1:

return lenth

i =0while i < lenth:

if nums[-1

]== nums[0]

andlen

(nums)!=1

: i +=

1del nums[0]

continue

now = nums[0]

del nums[0]

i +=

1 outlenth =

len(nums)

return outlenth

·我的思路:
剛開始沒有考慮到列表中乙個數或者兩個相同數的問題,直到後面測試案例測出來,我才發現。

我想乙個乙個檢測,因為題目中給出的測試輸入是有規律的,我這個演算法也就只能在這種環境下才能

執行。先測除陣列的長度,用做 while迴圈的條件,然後先判斷長度為0,1的陣列,如果遇到這種情

況直接結束,返回測得的長度。如果不滿足繼續執行。主要的內容就是,先把第乙個數拿出來,然後

把這個數新增到最後一位,再刪除第乙個數。以後每次,先判斷第乙個數是否和最後乙個數相同,若

相同直接刪除第乙個數,結束本次迴圈;若不是,就把這個數還是存到最後乙個,然後再刪除第乙個

。依次迴圈,直到while迴圈結束。

·大佬的**:
def

removeduplicates

(self, nums: list[

int])-

>

int:

iflen

(nums)==1

:return1if

not nums:

return

0 i =

0 j =

1 flag = nums[i]

while

(i<

len(nums)):

if nums[i]

== flag:

i +=

1else

: flag = nums[i]

nums[j]

= flag

j +=

1 i +=

1return j

·我對大佬**的理解:
先判斷陣列的長度是不是1或者0,如果這樣就返回他們的長度。然後定義乙個位置i,乙個計數(初值給1),

然後把第乙個數給flag,然後依次迴圈比較第i個數和flag是否相同,如果相同,就把給i += 1,若果不同就

把這個數給flag,然後給j += 1。直到迴圈結束。返回計數j。666

從排序陣列中刪除重複項

nums 是以 引用 方式傳遞的。也就是說,不對實參做任何拷貝 int len removeduplicates nums 在函式裡修改輸入陣列對於呼叫者是可見的。根據你的函式返回的長度,它會列印出陣列中該長度範圍內的所有元素。for int i 0 i len i 核心思想 list是有序的,將不...

從排序陣列中刪除重複項

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

從排序陣列中刪除重複項

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