zoukankan      html  css  js  c++  java
  • 7.Leetcode53 Maximum Subarray 笔记

    1:题目描述

    Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

    For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
    the contiguous subarray [4,-1,2,1] has the largest sum = 6.

    找出一组数字中最大的连续数字的和

    2:题目分析

    这个题,一看就感觉特别容易,用了双指针然后就贴了代码。然额……

    之后在网上搜了一下,原来还有神奇的“线性时间算法”,遍历一次直接出结果 w(゚Д゚)w

    ①设i<=k<=j,max=Σnums[i,j],如果Σnums[i,k]<0,则Σnums[k,j]>Σnums[i,j],假设不成立,所以说和最大的连续数字中不会有连续数字前缀为负的情况。

    ②在这组数字中取断点,把前缀为负的情况分离开,之后比较大小

    3:解题思路

     1  def maxSubArray(self, nums):
     2         """
     3         :type nums: List[int]
     4         :rtype: int
     5         """
     6         i=0
     7         sum=0
     8         max_sum=-2**31   #把最大值设为最小
     9         while i<len(nums):  
    10             sum+=nums[i]    #只计算前缀的数字和
    11             max_sum=max(sum,max_sum)  #取数值最大的前缀和
    12             if sum<0:           #遇见前缀为零的情况,sum归零
    13                 sum=0
    14             i=i+1
    15         return max_sum

    4:解题感悟

    这个算法真的好神奇,长见识了(#^.^#)

  • 相关阅读:
    libjpeg的问题
    CURLcode的定义
    libcurl断点下载遇到的问题
    itunes connect
    node.js模块的坑
    itunes connect 改版后无法访问的处理办法
    cocos2d-x 在输入文字时点击语音crash
    Windows下LuaJIT的编译和使用
    多个so中模板单例的多次实例化
    多线程中避免使用信号量
  • 原文地址:https://www.cnblogs.com/19991201xiao/p/8409764.html
Copyright © 2011-2022 走看看