【LeetCode 26】Remove Duplicates from Sorted Array(Python)__Python

來源:互聯網
上載者:User

Given a sorted array, remove the duplicates in-place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
題目分析:給定一個已經排好序的數組。要求刪掉其中重複的數,然後返回排好序的新數組長度。
方法一: 思路:這道題是我做過的最簡單的一道了,時間複雜度為O(n)。不做多餘解釋了,直接上代碼。 代碼:(可以提交)

class Solution:    def removeDuplicates(self, nums):        """        :type nums: List[int]        :rtype: int        """        a=0   #用做計數        length=len(nums)        if length<2:            return length        for i in range(1,length):            if nums[a]!=nums[i]:                a+=1                nums[a]=nums[i]        a+=1        return a

方法二: 劃重點:這是提交後看到其他大神的寫法,簡直是牛逼哄哄啊,一開始都沒看懂,時間複雜度比我的低多了是O(1)啊。放上來大家欣賞一下,我也順便做個簡單的解說(自我理解,有錯誤請糾正)

class Solution:    def removeDuplicates(self, nums):        """        :type nums: List[int]        :rtype: int        """        nums[:]=sorted(list(set(nums)))          '''這就是大神和我這等凡人的區別,人家的代碼只要一行就可以。其實吧我覺得最後還應該再加一行return len(nums) 因為題目要求你返回一個長度。但是我發現LeetCode對這道題的檢驗標準是看你處理後的數組。並沒有看他的長度是多少,所以return len(nums)可有可無。只是既然題目要求了這裡還是說一下吧。'''

針對這唯一一行的代碼做的個分析: 首先從最內層的括弧開始看起,也就是set(nums) #set這個方法是進行一個(無序,不重複)的處理,這一步就直接去掉了nums中所有重複的元素,但打亂了原本排好的順序,也將列表變成了元組(注意看下面例子中的括弧就可以區分元組和列表)。下面給大家看一個從別人部落格上扒下來的小李子:

>>> x = set('spam')  >>> y = set(['h','a','m'])  >>> x, y  (set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))  >>> x & y # 交集  set(['a', 'm'])  >>> x | y # 並集  set(['a', 'p', 's', 'h', 'm'])  >>> x - y # 差集  set(['p', 's'])  

2.第二層括弧list(… …) #將我在上一步中提到的元組(set的副作用)變回列表形式。
3.到最外層的括弧了sorted()#返回一個經過排序的新列表,不覆蓋之前的列表。這裡來複習一下sort()和sorted()的區別:

>>>a=[3,2,1,4,5]>>>b=sorted(a)>>>a,b[3,2,1,4,5],[1,2,3,4,5]>>>a.sort()>>>a[1,2,3,4,5]

4.將結果附給nums[:] #此時的nums就變成了一個無重複並以排好序的數組。

總結:在看大神的程式時,重新複習了一下之前的知識,並瞭解了set()的用法(這個在我之前學習的過程中貌似沒有見到過)。既然看懂了別人的程式,之後在做題的時候,就要盡量去提高自己的代碼品質,向大神學習,不能只是看看就算了。要向人家學習啊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.