小李飞刀:用python刷题ing....
叨逼叨
默認(rèn)每天都要刷兩道題。
今天目標(biāo)已完成。
第一題
26. 刪除排序數(shù)組中的重復(fù)項
難度:簡單
類型:數(shù)組
不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。
這題其實我之前做過,但是一直提交失敗。
經(jīng)過昨天的那題數(shù)組題,我換了一種for in方式。
之前我采用的是下標(biāo)來定位,用pop來刪除重復(fù)項。
這次采用了數(shù)組內(nèi)的每一項來單獨做對比,用remove來進(jìn)行刪除操作。
其中的if length > 1是后面進(jìn)行修改的,是必須的判定。
因為可能存在空數(shù)組的情況,那么length = 0,不需要刪除任何項目。
而當(dāng)只有一個數(shù)組的時候,length = 1,同樣不需要刪除任何項目。
看了下用時,800ms屬于中間位置。
看了下44ms的范例,采用的是下標(biāo)標(biāo)記,用了反向的思路。
因為是有序數(shù)組,采用了快慢兩種指針,當(dāng)存在不一致的時候,可以進(jìn)行覆蓋,達(dá)到刪除的目的。
第二題
80. 刪除排序數(shù)組中的重復(fù)項 II
難度:中等
類型:數(shù)組
不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。
和第一題十分相似,但是多了條件,就是數(shù)值可以出現(xiàn)兩次,這就需要額外的進(jìn)行計數(shù)。
class Solution:def removeDuplicates(self, nums):""":type nums: List[int]:rtype: int"""if len(nums) < 1:return 0point = nums[0]count = 0 for i in nums[1:]:if point != i:point = icount = 0else:count = count + 1if count == 2:nums.remove(i)count = 1return len(nums)我的思路都是比較粗暴的辦法,就是用變量記錄當(dāng)前的對比值,當(dāng)對比值出現(xiàn)超出2次時候,就進(jìn)行remove,和第一題比較接近的思路,方法也大致相同。
這題的用時會更少一點,但是也是中間位置。
總結(jié)
這兩天做的題目都比較相似,而且難度較低,都是數(shù)組的題目。
套路比較相似,對python3的刪除操作和遍歷也有了更深的認(rèn)識與實踐。
后續(xù)要開始做更多其他數(shù)據(jù)結(jié)構(gòu)的題目,不斷嘗試。
總結(jié)
以上是生活随笔為你收集整理的小李飞刀:用python刷题ing....的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java1.8.0_java jdk官方
- 下一篇: ios 部分string颜色_iOS-代