【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項

【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項

1、寫在前面

LeetCode 第八題 有效的括號 傳輸門:LeetCode008 : 有效的括號
今天給你們分享的是LeetCode 數組與字符串 第九題:刪除排序數組中的重複項,爲面試而生,期待你的加入。程序員

2、今日題目

給定一個排序數組,你須要在原地刪除重複出現的元素,使得每一個元素只出現一次,返回移除後數組的新長度。面試

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

你不須要考慮數組中超出新長度後面的元素。

3、 分析

這個題目的話,第一眼看上仍是愣了一下,只能在原列表操做,並且額外空間複雜度得保證爲O(1)。數組

不過仔細一想,也還比較好作,由於原列表已經有序,咱們要作的就是把重複元素去除或者移到後面去,由於最後removeDuplicates函數的返回值是最長的無重複列表長度,就好像示例1中的,返回值就爲2,打印的結果是修改後的列表的前兩個元素[1,2],接下來看看個人思路分析吧:微信

【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項
個人思路markdown

【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項
圖解算法ide

4、解題

  • 個人方法:
    時間複雜度:O(n)
    空間複雜度:O(1),符合題意
# 個人方法
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
  • 提交結果
    【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項
    昨天第一次提交
    【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項
    今天又提交了幾回

測試數據:161組
運行時間:44-152ms
擊敗人百分比:7.95-99.54%函數

  • 最簡單解法
    利用set集合去除列表元素,直接改變原列表
    時間複雜度:O(1)
    空間複雜度:O(1)
class Solution():
    def removeDuplicates(self,nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums[:] = list(sorted(set(nums)))
        return len(nums)
  • 提交結果
    【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項
    提交5次

測試數據:161組
運行時間:44-80ms
擊敗人百分比:22.34-99.54%學習

5、疑惑

首先,我今天肯定了,討論算法優秀,或者最優解,並不能靠提交結果來看,得從時間複雜度和空間複雜度以及實現難度上來看,後面算法刷題我也會注意這一點,多分析複雜度計算。測試

6、結語

不知不覺,一個多月過去了,和本身說一句加油吧,若是你和我同樣還在堅持的話~

留一個問題:若是你在面試遇到這個題目,如何快速找出有序列表非重複元素?你會給出那種解答,直接說用set集合就能夠去重仍是語重心長的和HR講思想?或者你會怎麼解答這個問題?(留言給出你的答案吧~)

堅持 and 努力 : 終有所獲。
【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項

END
維權路上
我今天,攤上了件大事!
往期精彩
避坑法則:程序員必知的42個法律雷區
爬蟲 and 數據分析 | 一萬條b站評論看工做細胞
LeetCode008:有效的括號
揭開互聯網公司的神祕面紗,數據解讀那些slay整個行業的互聯網公司
進學習交流羣
不失聯,掃碼加X先生微信學習交流

【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項
【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項
舒適提示
歡迎你們轉載,轉發,留言,點贊支持X先生。
文末廣告點一下也是對X先生莫大的支持。
作知識的傳播者,隨手轉發。


更多精彩推薦,請關注咱們

【邊學邊敲邊記】LeetCode009:刪除排序數組中的重複項一點支持,向前一大步

相關文章
相關標籤/搜索