LeetCode 第八題 有效的括號 傳輸門:LeetCode008 : 有效的括號
今天給你們分享的是LeetCode 數組與字符串 第九題:刪除排序數組中的重複項,爲面試而生,期待你的加入。程序員
給定一個排序數組,你須要在原地刪除重複出現的元素,使得每一個元素只出現一次,返回移除後數組的新長度。面試
不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 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。 你不須要考慮數組中超出新長度後面的元素。
這個題目的話,第一眼看上仍是愣了一下,只能在原列表操做,並且額外空間複雜度得保證爲O(1)。數組
不過仔細一想,也還比較好作,由於原列表已經有序,咱們要作的就是把重複元素去除或者移到後面去,由於最後removeDuplicates函數的返回值是最長的無重複列表長度,就好像示例1中的,返回值就爲2,打印的結果是修改後的列表的前兩個元素[1,2],接下來看看個人思路分析吧:微信
個人思路markdown
圖解算法ide
# 個人方法 class Solution(object): def removeDuplicates(self, nums): """ :type nums: List[int] :rtype: int """ n = len(nums) if n<=0: # 長度小於或等於1 return 0 len_0 = 1 for i in range(1,n): # for循環向後遍歷 if nums[i] != nums[i-1]: nums[len_0] = nums[i] # 數據替換 len_0 = len_0 + 1 # 指針後移 return len_0
測試數據:161組
運行時間:44-152ms
擊敗人百分比:7.95-99.54%函數
class Solution(): def removeDuplicates(self,nums): """ :type nums: List[int] :rtype: int """ nums[:] = list(sorted(set(nums))) return len(nums)
測試數據:161組
運行時間:44-80ms
擊敗人百分比:22.34-99.54%學習
首先,我今天肯定了,討論算法優秀,或者最優解,並不能靠提交結果來看,得從時間複雜度和空間複雜度以及實現難度上來看,後面算法刷題我也會注意這一點,多分析複雜度計算。測試
不知不覺,一個多月過去了,和本身說一句加油吧,若是你和我同樣還在堅持的話~
留一個問題:若是你在面試遇到這個題目,如何快速找出有序列表非重複元素?你會給出那種解答,直接說用set集合就能夠去重仍是語重心長的和HR講思想?或者你會怎麼解答這個問題?(留言給出你的答案吧~)
堅持 and 努力 : 終有所獲。
END
維權路上
我今天,攤上了件大事!
往期精彩
避坑法則:程序員必知的42個法律雷區
爬蟲 and 數據分析 | 一萬條b站評論看工做細胞
LeetCode008:有效的括號
揭開互聯網公司的神祕面紗,數據解讀那些slay整個行業的互聯網公司
進學習交流羣
不失聯,掃碼加X先生微信學習交流
舒適提示
歡迎你們轉載,轉發,留言,點贊支持X先生。
文末廣告點一下也是對X先生莫大的支持。
作知識的傳播者,隨手轉發。
▼
更多精彩推薦,請關注咱們
▼一點支持,向前一大步