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

    Maximum Subarray

    • O(n) solution:local解的核心就是判断是否从当前元素重新开始。如果前一个local值<0,那么要从这个元素开始。
    • divide and conquer:两点
      • 包含中间点的最长序列的计算:向左右两方向延伸,不断更新最大值,最差情况是遍历所有元素,O(n)。注意最小值是0,而不是INT_MIN:空序列是0,所以不用担心会有负数结果。如果用INT_MIN,不更新的情况不是得到0
      • recursion:这类递归和merge sort类似结构,值得注意的是边界条件。另外如果递归是(low, m), (m+1, high),那么注意无限循环因为1个或者2个元素m总是在第一个元素不变。递归也可能是(low,m-1),(m+1,high)。所以前者边界里包含low==high,后者边界要包含low>high
    class Solution(object):
        def maxSubArray(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            def maxSubRec(nums, i, j):
                if i>j:
                    return -sys.maxint - 1
                
                m = i+(j-i)/2
                # go left
                k = m-1
                leftsum = 0
                sum = 0
                for k in range(m-1, i-1, -1):
                    sum += nums[k]
                    if leftsum<sum:
                        leftsum=sum
                
                k = m+1
                rightsum = 0
                sum = 0
                for k in range(m+1, j+1):
                    sum += nums[k]
                    if rightsum<sum:
                        rightsum=sum
                return max(leftsum+rightsum+nums[m], maxSubRec(nums, i, m-1), maxSubRec(nums, m+1, j))
            
            return maxSubRec(nums, 0, len(nums)-1)
    
  • 相关阅读:
    51nod乘积之和
    Dell服务器安装OpenManage(OMSA)
    Nginx反向代理PHP
    搭建haproxy
    108. Convert Sorted Array to Binary Search Tree
    60. Permutation Sequence
    142. Linked List Cycle II
    129. Sum Root to Leaf Numbers
    118. Pascal's Triangle
    26. Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/absolute/p/5678083.html
Copyright © 2011-2022 走看看