我的**:
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...