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

2021-10-06 08:52:33 字數 1706 閱讀 2456

"""

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

難度簡單

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

不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用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。

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

說明:為什麼返回數值是整數,但輸出的答案是陣列呢?

請注意,輸入陣列是以「引用」方式傳遞的,這意味著在函式裡修改輸入陣列對於呼叫者是可見的。

你可以想象內部操作如下:

// nums 是以「引用」方式傳遞的。也就是說,不對實參做任何拷貝

int len = removeduplicates(nums);

// 在函式裡修改輸入陣列對於呼叫者是可見的。

// 根據你的函式返回的長度, 它會列印出陣列中該長度範圍內的所有元素。

for (int i = 0; i < len; i++)

""""""

審題:有序陣列,原地刪除,不需要額外內測空間

演算法:特例:空,只有乙個,直接返回即可,可以不單獨寫~

問題:如果是 for正序遍歷 + 動態刪除前面的,會索引錯誤

解決一:for 倒序遍歷 + 動態刪除後面的,即:

i和i-1比較:

相等,就彈出i;否則,繼續下一輪迴圈

演算法分析:

空間:o(1)

"""class solution(object):

def removeduplicates(self, nums):

""":type nums: list[int]

:rtype: int

"""# 特例:空、只有乙個,直接返回即可

if len(nums) <= 1:

return len(nums)

nums_len = len(nums)

# for 倒序遍歷 + 動態刪除後面的

for i in range(nums_len - 1, 0, -1):

# i 和 i-1 比較大小:

# 如果相等,就彈出i;否則,繼續下一輪迴圈

if nums[i] == nums[i - 1]:

nums.pop(i)

return len(nums)

s = solution()

print(s.removeduplicates())

print(s.removeduplicates([1]))

print(s.removeduplicates([1, 1, 2]))

print(s.removeduplicates([0, 0, 1, 1, 1, 2, 2, 3, 3, 4]))

"""執行用時 :68 ms, 在所有 python3 提交中擊敗了45.80% 的使用者

記憶體消耗 :14.7 mb, 在所有 python3 提交中擊敗了8.16%的使用者

"""

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...