leetcode 遞增的三元子序列 python

維護(hù)一組cp,存放當(dāng)前最合適的前兩個(gè)。
1.如果當(dāng)前讀到的數(shù),比第二個(gè)還大,輸出True。
2.如果比第二個(gè)小,比第一個(gè)大,更新第二個(gè)為當(dāng)前的數(shù)。
3.如果當(dāng)前數(shù)比第一個(gè)小,更新第一個(gè)為當(dāng)前數(shù)。

對(duì)于例子[2,3,1]
如果依照規(guī)則3,會(huì)找到[1,3]這樣一個(gè)子序列,這明顯是錯(cuò)的,但是卻不影響最終的結(jié)果。(我們只關(guān)心當(dāng)前是否有長(zhǎng)度為2的序列,第二個(gè)數(shù)是多少,而第一個(gè)數(shù)是多少是不關(guān)心的)

class Solution(object):
    def increasingTriplet(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        if len(nums)<3:
            return False
        
        best_cp=[float("inf"),float("inf")]
        
        for num in nums:
            if num > best_cp[1]:
                return True            
            
            if num<best_cp[0]:
                best_cp[0]=num
                continue
            
            if num>best_cp[0] and num<best_cp[1]:
                best_cp[1]=num
        return False

窮舉法(不符合要求):

class Solution(object):
    def increasingTriplet(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        if len(nums)==0:
            return False
        for i1 in range(len(nums)-2):
            if nums[i1]>nums[i1+1]:
                continue
            for i2 in range(i1+1,len(nums)):
                if nums[i2]<=nums[i1]:
                    continue
                for i3 in range(i2+1,len(nums)):
                    if nums[i3] >nums[i2]:
                        return True
        return False

維護(hù)兩個(gè)cp,一個(gè)表示當(dāng)前最好的cp,一個(gè)表示可能取代它的cp。分了很多情況,但總算是搞定了。

class Solution(object):
    def increasingTriplet(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        best_cp=[None,None]
        cur_cp=[None,None]
        
        for num in nums:
            #print(num)
            #print(best_cp)
            #print(cur_cp)
            if best_cp[0] is None:
                best_cp[0]=num
                continue
            if best_cp[1] is None:
                if num<best_cp[0]:
                    best_cp[0]=num
                if num>best_cp[0]:
                    best_cp[1]=num
                continue
            if num > best_cp[1]:
                return True
            
            if num == best_cp[1]:
                continue
            
            if num > best_cp[0]:
                best_cp[1]=num
                continue
            
            if cur_cp[0]==None:
                cur_cp[0]=num
            
            if num<cur_cp[0]:
                cur_cp[0]=num
            if num>cur_cp[0]:
                cur_cp[1]=num
            
            if cur_cp[1] is not None:
                if cur_cp[1] < best_cp[1]:
                    best_cp=cur_cp[:]
                else:
                    cur_cp[:]=[None,None]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容