day2

1

思路:首先想到的就是暴力枚举,不出所料超时了。然后就没有思路了。查看官方解释,发现归并算法还有这个效果。两个分别有序的子数组,在经过归并排序的过程中,每一步中如果是后面的元素比较小,则将后面的元素排序并统计前一个子数组中的剩余元素个数并累计。最后得到的就是逆序对总数,并且还能得到排序后的有序数组。

时间复杂度是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

思路:这题是真的一点思路都没有,题目都没看懂。后来看完题解之后有了一点思路,可以用递归,先找到最左边的左子节点,它就是最后的根节点然后从左下角,左子节点变为根节点,根节点变为右子节点,右节点变为左子节点。

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 初级排序算法 排序算法关注的主要是重新排列数组元素,其中每个元素都有一个主键。排序算法是将所有元素主键按某种方...
    深度沉迷学习阅读 1,627评论 0 1
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 1,582评论 1 4
  • 一. 写在前面 要学习算法,“排序”是一个回避不了的重要话题,在分析完并查集算法和常用数据结构之后,今天我们终于可...
    Leesper阅读 2,672评论 0 40
  • 最近在读< >时,了解到了很多常用的排序算法,故写一篇读书笔记记录下这些排序算法的思路和实现. 冒泡排序 冒泡排序...
    SylvanasSun阅读 842评论 0 0
  • 快排上图中空间复杂度数据错误,应该是O(log n)。 插入,堆,归并,快排 n表示数据规模,k表示桶的个数。n:...
    hadoop_a9bb阅读 1,715评论 2 36

友情链接更多精彩内容