zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 106

    题做多了就会发现这题的code结构和Kth Largest Element in an Array O(n)很像,除了要两边都要recursion而不是一边以外。

    • 通过长度计算index,总是有反向计算公式来验证作为intuition
    • offset的意义:因为offset是当前范围在inorder序列里的左边界,注意在preorder和postorder的右子树递归都是offset+m+1:加上m个左子树结点和1个当前root。
    import random
    class Solution(object):
        def findKthLargest(self, nums, k):
            """
            :type nums: List[int]
            :type k: int
            :rtype: int
            """
            def findRec(nums, i, j, k):
                m = partition(nums, i, j)
                kth = m-i+1
                print("i={0},j={1},m={2},kth={3},k={4}".format(i,j,m,kth,k))
                if kth==k:
                    return nums[m]
                elif kth>k:
                    return findRec(nums, i, m-1, k)
                else:
                    return findRec(nums, m+1, j, k-kth)
    
            def partition(nums, i, j):
                e = i
                for s in range(i+1, j+1):
                    if nums[s]>=nums[i]:
                        e+=1
                        nums[e],nums[s]=nums[s],nums[e]
                nums[e],nums[i]=nums[i],nums[e]
                return e
            
            return findRec(nums, 0, len(nums)-1, k)
    
  • 相关阅读:
    js兼容性——获取当前浏览器窗口的宽高
    pip 换源
    5 二分查找 算法
    顺序查找 冒泡 快排 等
    4 顺序表和链表
    python垃圾回收机制
    3 栈 队列 双头队列
    2 数据结构的性能分析 timeit
    1 时间复杂度
    线程池 爬取一本小说
  • 原文地址:https://www.cnblogs.com/absolute/p/5983289.html
Copyright © 2011-2022 走看看