美文网首页算法学习
算法题--求最大和子序列

算法题--求最大和子序列

作者: 岁月如歌2020 | 来源:发表于2020-04-13 00:17 被阅读0次
image.png

0. 链接

题目链接

1. 题目

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.

Follow up:

  • If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

2. 思路1:单次遍历

  1. 分析:

多个元素求和,正数会带来和的增加,负数会带来和的减少, 面临的任务是找到最佳的分组, 所以过程中需要及时剔除掉不好的分组;

分组的形式可以为

  • 单个元素
  • 多个元素

剔除的依据,就是当前分组是否可以超越历史最佳分组

  1. 过程

(1) 设置变量

  • max_sum: 表示历史最佳分组和
  • curr_sum: 表示当前正在考察的分组的和

(2) 遍历查找

  • 从左到右遍历
  • 对每个位置的值,试图将该值累加到正在考察的分组的和curr_sum上,然后看它是否大于当前单个元素值,如果大于等于,说明当前分组仍有潜力;如果小于,说明当前分组没潜力,需要重新以当前元素值作为新的分组的起点
  • 检查curr_sum是否超越了历史最佳分组和max_sum
  • 最后得到历史最佳分组和max_sum并返回

3. 代码

# coding:utf8
from typing import List


class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        curr_sum = None
        max_sum = None
        for num in nums:
            if curr_sum is not None and max_sum is not None:
                curr_sum = max(curr_sum + num, num)
                max_sum = max(curr_sum, max_sum)
            else:
                max_sum = curr_sum = num

        return max_sum


solution = Solution()
print(solution.maxSubArray([0]))
print(solution.maxSubArray([-2, -1]))
print(solution.maxSubArray([-2, 1, -3, 4, -1, 2, 1, -5, 4]))

输出结果

0
-1
6

4. 结果

image.png

相关文章

  • 算法题--求最大和子序列

    0. 链接 题目链接 1. 题目 Given an integer array nums, find the co...

  • 面试题2

    四、数据结构和算法 1、求一串数字序列中的连续子串最大和,比如arr=1 -2 3 -1 2,连续子串最大和就是3...

  • 求连续子序列最大和

    给定一个无序数组,求最大的连续子数组的和 解法一: 思路:暴力解法,最大序列肯定以数组中某个数为起点,则依次遍历以...

  • 360一面(已跪)

    1.先来了两个算法题 给一个无序的序列,序列中的数为整数(可正可负),求连续子序列的和的最大值。例:-8,1,3,...

  • 最长公共子串与最长公共子序列

    最长公共子串 参考文献 经典算法题每日演练——第四题 最长公共子序列

  • [python] 最大连续子序数之和

    问题:连续子序列最大和给定一个数字序列[A1A2A3…An],求i,j(1<=i<=j<=n)使得Ai…Aj和最大...

  • 一题算法|求最长和谐子序列

    和谐子序列的定义 和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1,也就是说我们需要找出比该元素大于或...

  • 最大子串和算法与归纳递推法

    1. 问题描述 现有一个整数序列 (), 长度为 , 求具有最大和的子串 2. 初次的归纳递推尝试 现有序列 假设...

  • 动态规划

    1子序列的最大和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最...

  • 算法:求连续子数组的最大和

    一道基础算法,给定一个有正有负的数组,求出其中不限定个数的相邻相加最大和先上图解 用python写 这题本身蛮简单...

网友评论

    本文标题:算法题--求最大和子序列

    本文链接:https://www.haomeiwen.com/subject/dscwmhtx.html