The Day Two 找到一个具有最大和的连续子数组,返回其最大和
"""
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
"""
"""
author:jiyanjiao
date :2019-10-22
""" class Solution:
max_index = 0 # 子数组和最大的索引
max_sum = 0 # 子数组和的最大值
sum_list = [] # 子数组和的列表
sub_list = [] # 最大和的子数组列表 def maxSubArray(self, nums_list, le) -> int:
"""
:param nums_list: 传入的数组
:param le: 期望的子数组的长度
:return: 子数组和最大值,最大和的子数组的列表
"""
if le > len(nums_list):
raise Exception('子数组长度大于父数组长度')
elif le < 1 or len(nums_list) == 0:
raise Exception("父数组不能为空,或者,子数组至少包含一个元素")
elif le == len(nums_list):
raise Exception("仅有一组数不符合规则") # 求指定长度子数组的和
for i in range(len(nums_list)-1):
s_sum = 0
for j in range(i, i+le):
# 子数组顺序的组合情况,去掉最后一组不够长度的子数组
if len(nums_list) % le == 0:
s_sum += nums_list[j]
else:
s_sum += nums_list[j-1]
i += 1
self.sum_list.append(s_sum) # 求子数组和的最大值,和最大值索引
for i in range(len(self.sum_list)-1):
for j in range(i+1, len(self.sum_list)):
if len(nums_list) % le == 0:
if self.sum_list[i] > self.sum_list[j]:
self.max_sum = self.sum_list[i]
self.max_index = i
else:
self.max_sum = self.sum_list[j]
self.max_index = j
else:
if self.sum_list[i] > self.sum_list[j]:
self.max_sum = self.sum_list[i]
self.max_index = i
else:
self.max_sum = self.sum_list[j]
self.max_index = j-1 # 根据子数组和的最大值索引算出子数组在符数组中索引
for i in range(self.max_index-1, self.max_index+le):
self.sub_list.append(nums_list[i]) print("传入的数组是{},{}个长度的连续子数组最大和为{},最大和的数组为{}".format(nums_list, le, self.max_sum, self.sub_list)) # 求数组中的值的和 本次未用到
def sumArray(self, num_list):
sum = 0
for i in range(len(num_list)):
sum += num_list[i]
return sum # Your MedianFinder object will be instantiated and called as such:
if __name__ == '__main__':
pass # obj = MedianFinder()
# obj.addNum(1)
# obj.addNum(2)
# obj.addNum(4)
# obj.addNum(3)
# obj.addNum(5)
# param_2 = obj.findMedian() s = Solution()
# s.maxSubArray([1,2,3,4,5,6])
s.maxSubArray([-1,2,1,0,0],3)
注: 这是小编自行整理,仅仅是实现了功能,不设计算法,正确的解法如下:有待研究~~
'''
1. 暴力求解
基本思路就是遍历一遍,用两个变量,一个记录最大的和,一个记录当前的和。时空复杂度貌似还不错......(时间复杂度 O(n)O(n),空间复杂度 O(l)O(l))
'''
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
tmp = nums[0]
max_ = tmp
n = len(nums)
for i in range(1,n):
# 当当前序列加上此时的元素的值大于tmp的值,说明最大序列和可能出现在后续序列中,记录此时的最大值
if tmp + nums[i]>nums[i]:
max_ = max(max_, tmp+nums[i])
tmp = tmp + nums[i]
else:
#当tmp(当前和)小于下一个元素时,当前最长序列到此为止。以该元素为起点继续找最大子序列,
# 并记录此时的最大值
max_ = max(max_, tmp, tmp+nums[i], nums[i])
tmp = nums[i]
return max_ '''
作者:pandawakaka
链接:https://leetcode-cn.com/problems/maximum-subarray/solution/bao-li-qiu-jie-by-pandawakaka/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
'''
The Day Two 找到一个具有最大和的连续子数组,返回其最大和的更多相关文章
- 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)
""" #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...
- 523 Continuous Subarray Sum 非负数组中找到和为K的倍数的连续子数组
非负数组中找到和为K的倍数的连续子数组 详见:https://leetcode.com/problems/continuous-subarray-sum/description/ Java实现: 方法 ...
- 【剑指offer】最大和连续子阵列
个開始,到第3个为止).你会不会被他忽悠住? 输入: 输入有多组数据,每组測试数据包括两行. 第一行为一个整数n(0<=n<=100000),当n=0时,输入结束.接下去的一行包括n个整数 ...
- “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)
解决方案: “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载) 遇到的问题: 在.h头文件中采用namespace 命名空间报错 test.h namespace LMR ...
- 【C语言】在两个数成对出现的数组中找到一个单独的数。
//在两个数成对出现的数组中找到一个单独的数.比如{1,2,3.3,1,4.2},即找出4 #include <stdio.h> int find(int arr[], int len) ...
- 跑ssis分组差错:没有关联“”。假设无法找到一个特定的连接元件,Connections 这种错误发生的收集
跑ssis分组差错:没有关联"".假设无法找到一个特定的连接元件,Connections 这种错误发生的收集. 在网上搜了一下,解决方法: 打开SqlServer Configur ...
- LeetCode 34. Search for a Range (找到一个范围)
Given an array of integers sorted in ascending order, find the starting and ending position of a giv ...
- error LNK1169 找到一个或多个多重定义的符号的解决方法
问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. A.h是头文件,其中声明了三个变量a1.a2. a3. B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件.B.cpp ...
- fatal error LNK1169: 找到一个或多个多重定义的符号或多个.c/.cpp文件想同时调用定义在.h文件里面的全局变量,防止重定义变量问题。
为什么.h文件中不能定义全局变量? 原因: 存在多次创建变量.如果头文件中可以定义全局变量,那么每个包含该头文件的文件里都会有该全局变量的定义.因为C语言的include是直接将文件嵌入到includ ...
随机推荐
- 【loj3059】【hnoi2019】序列
题目 给出一个长度为 \(n\) 的序列 \(A\) ; 你需要构造一个新的序列\(B\) ,满足: $B_{i} \le B_{i+1} (1 \le i \lt n ) $ $\sum_{i=1} ...
- GoCN每日新闻(2019-10-06)
GoCN每日新闻(2019-10-06) 国庆专辑:GopherChina祝大家国庆节快乐 GoCN每日新闻(2019-10-06) 1. Go 1.14 有什么新变化 http://docs.goo ...
- C#访问https地址实例
程序访问的网址从http换成了https,安全性更高了,程序对网址的访问也要改一下 C#访问https地址实例如下 namespace ConsoleApp2 { public class Progr ...
- Luogu3379 【模板】最近公共祖先(LCA)
题面 题解 这里讲一种硬核做法. 首先\(\mathrm{dfs}\)整棵树,求出这棵树的欧拉序,然后\(\mathrm{LCA}\)问题就变成了\(\pm 1\mathrm{RMQ}\)问题. 考虑 ...
- IOC注解方式1.0
在spring4之后,想要使用注解形式,必须得要引入aop的包 在配置文件当中,还得要引入一个context约束 <?xml version="1.0" encoding=& ...
- dockerfile文件语法命令
dockerfile文件语法命令 (1) FROM命令,支持两种形式,构建新镜像使用的基础镜像,所以源镜像必须存在,并且是非注释的第一条命令. DOCKERFILEFORM <image> ...
- 使用良好的自定义X264编码,取得极佳质量!《转》
原帖地址:http://www.xspliter.com/forum.php?mod=viewthread&tid=447 一般直播时使用A设定即可.你尝试设置并找出你最满意的设定 A为最需最 ...
- Windows10纯净原版系统安装方法
原文:https://baijiahao.baidu.com/s?id=1626696368732676440&wfr=spider&for=pc 1.先来下载一个纯净的ISO系统安装 ...
- matlab中可用于进行轮廓提取的函数
本文主要总结一下在matlab中可用于进行轮廓提取的函数. 1 bwperim 根据参考资料[2]的提示,可以使用bwperim()函数进行轮廓提取,具体代码如下: %读取原图im = imread( ...
- ireport初接触
我用的版本5.6.0 @官网下载地址 下载安装@参考博客龙凌云端,着重留意:在windows下使用,只下载iReport-5.6.0-windows-installer.exe就行了 安装后配置环境变 ...