題目描述
給定一個排序數(shù)組,你需要在刪除重復(fù)出現(xiàn)的元素,使得每個元素只出現(xiàn)一次,返回移除后數(shù)組的新長度。
不要使用額外的數(shù)組空間,你必須在并在使用 O(1) 額外空間的條件下完成。
示例 1:
給定數(shù)組 nums = [1,1,2],
函數(shù)應(yīng)該返回新的長度 2, 并且原數(shù)組 nums 的前兩個元素被修改為 1, 2。
你不需要考慮數(shù)組中超出新長度后面的元素。
示例 2:
給定 nums = [0,0,1,1,1,2,2,3,3,4],
函數(shù)應(yīng)該返回新的長度 5, 并且原數(shù)組 nums 的前五個元素被修改為 0, 1, 2, 3, 4。
你不需要考慮數(shù)組中超出新長度后面的元素。
說明:
為什么返回?cái)?shù)值是整數(shù),但輸出的答案是數(shù)組呢?
請注意,輸入數(shù)組是以“引用”方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對于調(diào)用者是可見的。
你可以想象內(nèi)部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實(shí)參做任何拷貝
int len = removeDuplicates(nums);
// 在函數(shù)里修改輸入數(shù)組對于調(diào)用者是可見的。
// 根據(jù)你的函數(shù)返回的長度, 它會打印出數(shù)組中該長度范圍內(nèi)的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}
瞎分析:
咳咳,大家要仔細(xì)讀題啦,他是讓我們返回新的數(shù)組的長度,然后他傳進(jìn)來的那個列表還是要用的,他后面的測試會針對他傳入的nums,也就是說他傳入的nums實(shí)際上可以認(rèn)為是一個映射??(詞語可能用的不是很恰當(dāng)....)我們可以改變它,然后要改成他題目想要我們改變成的樣子,我剛開始想的是這個list我們可以先把他轉(zhuǎn)成set
集合,然后再把他轉(zhuǎn)成list列表,然后返回新列表的長度....但是我不知道為啥,他執(zhí)行通不過,潤色一下代碼就可以啦哈哈哈哈哈哈哈哈哈哈哈
代碼:
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
new_nums = sorted(list(set(nums)))
nums.clear()
nums.extend(new_nums)
return len(nums)
這里sorted()和sort()函數(shù)是有區(qū)別的,我也貼出來了,
sort 與 sorted 區(qū)別:
sort 是應(yīng)用在 list 上的方法,sorted 可以對所有可迭代的對象進(jìn)行排序操作。
list 的 sort 方法返回的是對已經(jīng)存在的列表進(jìn)行操作,無返回值,而內(nèi)建函數(shù) sorted 方法返回的是一個新的 list,而不是在原來的基礎(chǔ)上進(jìn)行的操作。
還是不懂得就取看看廖雪峰關(guān)于sorted()的教程吧,他講的還挺詳細(xì)的
鏈接點(diǎn)我點(diǎn)我點(diǎn)我