题解 | 最大连续子序列

最大连续子序列

https://www.nowcoder.com/practice/afe7c043f0644f60af98a0fba61af8e7

def find_max_subseq(nums, n):
    """查找最大连续子序列"""
    # dp[i]表示以i结尾的最大子序列和
    dp = nums.copy()
    # 记录每个位置的起始索引
    start_idx = [i for i in range(n)]
    
    max_sum = dp[0]
    end = 0
    start = 0
    
    # 动态规划
    for i in range(1, n):
        if dp[i-1] + nums[i] > nums[i]:
            dp[i] = dp[i-1] + nums[i]
            start_idx[i] = start_idx[i-1]
        else:
            dp[i] = nums[i]
            start_idx[i] = i
            
        # 更新全局最大值
        if dp[i] > max_sum or (dp[i] == max_sum and start_idx[i] < start):
            max_sum = dp[i]
            end = i
            start = start_idx[i]
            
    return max_sum, nums[start], nums[end]

def main():
    while True:
        try:
            n = int(input())
            if n == 0:
                break
                
            nums = list(map(int, input().split()))
            
            # 处理全负数情况
            if all(x < 0 for x in nums):
                print(0, nums[0], nums[-1])
                continue
                
            max_sum, first, last = find_max_subseq(nums, n)
            print(max_sum, first, last)
            
        except EOFError:
            break

if __name__ == "__main__":
    main()

全部评论

相关推荐

King987:这不就是力扣的算法题吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务