Leetcode练习(Python):数组类:第53题:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。


题目:

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。进阶:  如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

思路:贪心法和分而治之

程序1:贪心发

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        length = len(nums)
        auxiliary = nums[0]
        temp_result = nums[0]

        for index in range(1,length):
            auxiliary = max(nums[index], auxiliary + nums[index])
            temp_result = max(auxiliary, temp_result)
        
        result = temp_result
        return result
程序2:分而治之
官方思路示图:
 

 

 

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        length = len(nums)
        if length <= 1:
            return nums[0]
        left = self.maxSubArray(nums[0 : len(nums) // 2])
        right = self.maxSubArray(nums[len(nums) //2 : len(nums)])

        middle_left = nums[len(nums) // 2 - 1]
        auxiliary_1 = 0
        for index1 in range(len(nums) // 2 - 1, -1, -1):
            auxiliary_1 += nums[index1]
            middle_left = max(middle_left, auxiliary_1)
        
        middle_right = nums[len(nums) // 2]
        auxiliary_2 = 0
        for index2 in range(len(nums) // 2, len(nums), 1):
            auxiliary_2 += nums[index2]
            middle_right = max(middle_right, auxiliary_2)
        
        middle = middle_left + middle_right

        result = max(left, right, middle)

        return result


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n)) 输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)(解决) Leetcode练习(Python):数组类:第128题:给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 Leetcode练习(Python):数组类:第152题:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字)。 Leetcode练习(Python):数组类:第34题:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 python实现连续子数组的最大和 Leetcode练习(Python):数组类:第209题:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。 Leetcode练习(python):第414题:第三大的数:给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 连续子数组最大和 找出一个整数数组的和最大的连续子数组
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM