leetcode面試top(7排序、二分檢索、滑動窗口)

排序

假設(shè)(不是一般性),某一對整數(shù) a 和 b ,我們的比較結(jié)果是 a 應(yīng)該在 b 前面,這意味著 a?b>b?a,其中? 表示連接。

如果排序結(jié)果是錯的,說明存在一個 c , b 在 c 前面且 c 在 a的前面。這產(chǎn)生了矛盾,因為 a?b>b?ab?c>c?b意味著a?c>c?a 。
換言之,我們的自定義比較方法保證了傳遞性,所以這樣子排序是對的。

給定一組非負整數(shù) nums,重新排列它們每位數(shù)字的順序使之組成一個最大的整數(shù)。
注意:輸出結(jié)果可能非常大,所以你需要返回一個字符串而不是整數(shù)。


class sort_rule(str):
    def __lt__(self, y):
        return self+y > self+x

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        sorted_nums = ''.join(sorted(map(str, nums), key=sort_rule))
        return '0' if sorted_nums[0] == '0' else sorted_nums
class Solution:
    def wiggleSort(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        s = len(nums)-len(nums)//2
        nums[0::2], nums[1::2] = sorted(nums)[:s][::-1], sorted(nums)[s:][::-1]
# [::-1]防止連續(xù)的數(shù)連續(xù)的放進去


376. 擺動序列

如果連續(xù)數(shù)字之間的差嚴格地在正數(shù)和負數(shù)之間交替,則數(shù)字序列稱為擺動序列。第一個差(如果存在的話)可能是正數(shù)或負數(shù)。少于兩個元素的序列也是擺動序列。
例如, [1,7,4,9,2,5] 是一個擺動序列,因為差值 (6,-3,5,-7,3) 是正負交替出現(xiàn)的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是擺動序列,第一個序列是因為它的前兩個差值都是正數(shù),第二個序列是因為它的最后一個差值為零。
給定一個整數(shù)序列,返回作為擺動序列的最長子序列的長度。 通過從原始序列中刪除一些(也可以不刪除)元素來獲得子序列,剩下的元素保持其原始順序。

class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        if len(nums) < 2: return len(nums)
        up, down = 1, 1
        for i in range(1, len(nums)):
            if nums[i] > nums[i-1]:
                up = down+1  # 直到遇到一個升序,才在降序的基礎(chǔ)上加1
            elif nums[i] < nums[i-1]:
                down = up+1
            else:  # 如果等于剔除該元素
                continue
        return max(up, down)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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