day2

1

思路:首先想到的就是暴力枚舉,不出所料超時(shí)了。然后就沒有思路了。查看官方解釋,發(fā)現(xiàn)歸并算法還有這個(gè)效果。兩個(gè)分別有序的子數(shù)組,在經(jīng)過歸并排序的過程中,每一步中如果是后面的元素比較小,則將后面的元素排序并統(tǒng)計(jì)前一個(gè)子數(shù)組中的剩余元素個(gè)數(shù)并累計(jì)。最后得到的就是逆序?qū)倲?shù),并且還能得到排序后的有序數(shù)組。

時(shí)間復(fù)雜度是O(n*logn)

class Solution:
    def __init__(self):
        self.count = 0

    def merge(self,nums1,nums2):
        nums3 = []
        while nums1 and nums2:
            if nums1[0] <= nums2[0]:
                nums3.append(nums1.pop(0))
            else:
                nums3.append(nums2.pop(0))
                self.count += len(nums1)
        if nums1:
            nums3 += nums1
        if nums2:
            nums3 += nums2
        return nums3

    def merge_sort(self,nums3):
        if len(nums3) <= 1:
                return nums3
        else:
            nums1 = nums3[:len(nums3) // 2]
            nums2 = nums3[len(nums3) // 2:]
            nums1 = self.merge_sort(nums1)
            nums2 = self.merge_sort(nums2)
            nums3 = self.merge(nums1,nums2)
            return nums3

    def reversePairs(self, nums: List[int]) -> int:
        if len(nums) <= 1:
            return 0
        else:
            self.merge_sort(nums)
            return self.count

2

思路:這題是真的一點(diǎn)思路都沒有,題目都沒看懂。后來看完題解之后有了一點(diǎn)思路,可以用遞歸,先找到最左邊的左子節(jié)點(diǎn),它就是最后的根節(jié)點(diǎn)然后從左下角,左子節(jié)點(diǎn)變?yōu)楦?jié)點(diǎn),根節(jié)點(diǎn)變?yōu)橛易庸?jié)點(diǎn),右節(jié)點(diǎn)變?yōu)樽笞庸?jié)點(diǎn)。

class Solution:
    def upsideDownBinaryTree(self, root: TreeNode) -> TreeNode:
        if root is None or root.left is None and root.right is None:
            return root
        
        newroot = self.upsideDownBinaryTree(root.left)
        root.left.left = root.right
        root.left.right = root

        root.left = None
        root.right = None

        return newroot
?著作權(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)容

  • 1 初級(jí)排序算法 排序算法關(guān)注的主要是重新排列數(shù)組元素,其中每個(gè)元素都有一個(gè)主鍵。排序算法是將所有元素主鍵按某種方...
    深度沉迷學(xué)習(xí)閱讀 1,598評(píng)論 0 1
  • 排序的基本概念 在計(jì)算機(jī)程序開發(fā)過程中,經(jīng)常需要一組數(shù)據(jù)元素(或記錄)按某個(gè)關(guān)鍵字進(jìn)行排序,排序完成的序列可用于快...
    Jack921閱讀 1,571評(píng)論 1 4
  • 一. 寫在前面 要學(xué)習(xí)算法,“排序”是一個(gè)回避不了的重要話題,在分析完并查集算法和常用數(shù)據(jù)結(jié)構(gòu)之后,今天我們終于可...
    Leesper閱讀 2,640評(píng)論 0 40
  • 最近在讀< >時(shí),了解到了很多常用的排序算法,故寫一篇讀書筆記記錄下這些排序算法的思路和實(shí)現(xiàn). 冒泡排序 冒泡排序...
    SylvanasSun閱讀 818評(píng)論 0 0
  • 快排上圖中空間復(fù)雜度數(shù)據(jù)錯(cuò)誤,應(yīng)該是O(log n)。 插入,堆,歸并,快排 n表示數(shù)據(jù)規(guī)模,k表示桶的個(gè)數(shù)。n:...
    hadoop_a9bb閱讀 1,690評(píng)論 2 36

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