1. """
  2. 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
  3.  
  4. 示例:
  5.  
  6. 输入: [-2,1,-3,4,-1,2,1,-5,4],
  7. 输出: 6
  8. 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
  9.  
  10. 来源:力扣(LeetCode)
  11. 链接:https://leetcode-cn.com/problems/maximum-subarray
  12. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
  13. """
  14. """
  15. author:jiyanjiao
  16. date :2019-10-22
  17. """
  18.  
  19. class Solution:
  20. max_index = 0 # 子数组和最大的索引
  21. max_sum = 0 # 子数组和的最大值
  22. sum_list = [] # 子数组和的列表
  23. sub_list = [] # 最大和的子数组列表
  24.  
  25. def maxSubArray(self, nums_list, le) -> int:
  26. """
  27. :param nums_list: 传入的数组
  28. :param le: 期望的子数组的长度
  29. :return: 子数组和最大值,最大和的子数组的列表
  30. """
  31. if le > len(nums_list):
  32. raise Exception('子数组长度大于父数组长度')
  33. elif le < 1 or len(nums_list) == 0:
  34. raise Exception("父数组不能为空,或者,子数组至少包含一个元素")
  35. elif le == len(nums_list):
  36. raise Exception("仅有一组数不符合规则")
  37.  
  38. # 求指定长度子数组的和
  39. for i in range(len(nums_list)-1):
  40. s_sum = 0
  41. for j in range(i, i+le):
  42. # 子数组顺序的组合情况,去掉最后一组不够长度的子数组
  43. if len(nums_list) % le == 0:
  44. s_sum += nums_list[j]
  45. else:
  46. s_sum += nums_list[j-1]
  47. i += 1
  48. self.sum_list.append(s_sum)
  49.  
  50. # 求子数组和的最大值,和最大值索引
  51. for i in range(len(self.sum_list)-1):
  52. for j in range(i+1, len(self.sum_list)):
  53. if len(nums_list) % le == 0:
  54. if self.sum_list[i] > self.sum_list[j]:
  55. self.max_sum = self.sum_list[i]
  56. self.max_index = i
  57. else:
  58. self.max_sum = self.sum_list[j]
  59. self.max_index = j
  60. else:
  61. if self.sum_list[i] > self.sum_list[j]:
  62. self.max_sum = self.sum_list[i]
  63. self.max_index = i
  64. else:
  65. self.max_sum = self.sum_list[j]
  66. self.max_index = j-1
  67.  
  68. # 根据子数组和的最大值索引算出子数组在符数组中索引
  69. for i in range(self.max_index-1, self.max_index+le):
  70. self.sub_list.append(nums_list[i])
  71.  
  72. print("传入的数组是{},{}个长度的连续子数组最大和为{},最大和的数组为{}".format(nums_list, le, self.max_sum, self.sub_list))
  73.  
  74. # 求数组中的值的和 本次未用到
  75. def sumArray(self, num_list):
  76. sum = 0
  77. for i in range(len(num_list)):
  78. sum += num_list[i]
  79. return sum
  80.  
  81. # Your MedianFinder object will be instantiated and called as such:
  82. if __name__ == '__main__':
  83. pass
  84.  
  85. # obj = MedianFinder()
  86. # obj.addNum(1)
  87. # obj.addNum(2)
  88. # obj.addNum(4)
  89. # obj.addNum(3)
  90. # obj.addNum(5)
  91. # param_2 = obj.findMedian()
  92.  
  93. s = Solution()
  94. # s.maxSubArray([1,2,3,4,5,6])
  95. s.maxSubArray([-1,2,1,0,0],3)

注: 这是小编自行整理,仅仅是实现了功能,不设计算法,正确的解法如下:有待研究~~

  1. '''
  2. 1. 暴力求解
  3. 基本思路就是遍历一遍,用两个变量,一个记录最大的和,一个记录当前的和。时空复杂度貌似还不错......(时间复杂度 O(n)O(n),空间复杂度 O(l)O(l))
  4. '''
  5. class Solution:
  6. def maxSubArray(self, nums: List[int]) -> int:
  7. tmp = nums[0]
  8. max_ = tmp
  9. n = len(nums)
  10. for i in range(1,n):
  11. # 当当前序列加上此时的元素的值大于tmp的值,说明最大序列和可能出现在后续序列中,记录此时的最大值
  12. if tmp + nums[i]>nums[i]:
  13. max_ = max(max_, tmp+nums[i])
  14. tmp = tmp + nums[i]
  15. else:
  16. #当tmp(当前和)小于下一个元素时,当前最长序列到此为止。以该元素为起点继续找最大子序列,
  17. # 并记录此时的最大值
  18. max_ = max(max_, tmp, tmp+nums[i], nums[i])
  19. tmp = nums[i]
  20. return max_
  21.  
  22. '''
  23. 作者:pandawakaka
  24. 链接:https://leetcode-cn.com/problems/maximum-subarray/solution/bao-li-qiu-jie-by-pandawakaka/
  25. 来源:力扣(LeetCode)
  26. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  27. '''

  

The Day Two 找到一个具有最大和的连续子数组,返回其最大和的更多相关文章

  1. 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

    """ #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...

  2. 523 Continuous Subarray Sum 非负数组中找到和为K的倍数的连续子数组

    非负数组中找到和为K的倍数的连续子数组 详见:https://leetcode.com/problems/continuous-subarray-sum/description/ Java实现: 方法 ...

  3. 【剑指offer】最大和连续子阵列

    个開始,到第3个为止).你会不会被他忽悠住? 输入: 输入有多组数据,每组測试数据包括两行. 第一行为一个整数n(0<=n<=100000),当n=0时,输入结束.接下去的一行包括n个整数 ...

  4. “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)

    解决方案: “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载) 遇到的问题: 在.h头文件中采用namespace 命名空间报错 test.h namespace LMR ...

  5. 【C语言】在两个数成对出现的数组中找到一个单独的数。

    //在两个数成对出现的数组中找到一个单独的数.比如{1,2,3.3,1,4.2},即找出4 #include <stdio.h> int find(int arr[], int len) ...

  6. 跑ssis分组差错:没有关联“”。假设无法找到一个特定的连接元件,Connections 这种错误发生的收集

    跑ssis分组差错:没有关联"".假设无法找到一个特定的连接元件,Connections 这种错误发生的收集. 在网上搜了一下,解决方法: 打开SqlServer Configur ...

  7. LeetCode 34. Search for a Range (找到一个范围)

    Given an array of integers sorted in ascending order, find the starting and ending position of a giv ...

  8. error LNK1169 找到一个或多个多重定义的符号的解决方法

    问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. A.h是头文件,其中声明了三个变量a1.a2. a3. B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件.B.cpp ...

  9. fatal error LNK1169: 找到一个或多个多重定义的符号或多个.c/.cpp文件想同时调用定义在.h文件里面的全局变量,防止重定义变量问题。

    为什么.h文件中不能定义全局变量? 原因: 存在多次创建变量.如果头文件中可以定义全局变量,那么每个包含该头文件的文件里都会有该全局变量的定义.因为C语言的include是直接将文件嵌入到includ ...

随机推荐

  1. mysql 表联结,内部联结

    mysql> select * from user; +------+----------+-----------+ | id | name | address | +------+------ ...

  2. ICEM-二维Y型网格的一种做法

    原视频下载地址:https://pan.baidu.com/s/1nvSBHoP 密码: uqy3

  3. K8S从入门到放弃

    K8S介绍相关 kubernetes(K8S)集群及Dashboard安装配置 kubernetes(K8S)创建自签TLS证书 K8S Kubernetes 架构 K8S组件 K8S API对象 K ...

  4. 各大web服务器https的证书文件

    nginx  key+pem iis pfx+pfx-password.txt tomcat pfx+pfx-password.txt apache key+chain.crt+public.crt

  5. CentOS7安装JDK1.8图文教程

    https://blog.csdn.net/weixin_42266606/article/details/80863781 1.下载 jdk 的 tar 包 网址:http://www.oracle ...

  6. tar加密码

    tar -zcvf - *** | openssl des3 -salt -k pass | dd of=.his dd if=.his | openssl des3 -d -k pass| tar ...

  7. 【转】Python访问oracle数据库,DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found"

    使用python连接Oracle,出现如下错误: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified ...

  8. java生成订单编号

    随着项目用户数量的扩大,高并发随之而来.那么如何在当前系统生成唯一编号呢? 一台数据库可以用自增,集群呢?当然也有随之的解决方案,但是最好的还是在项目生成了唯一的编号再插入到数据库.而不是数据库插入了 ...

  9. LeetCode_443. String Compression

    443. String Compression Easy Given an array of characters, compress it in-place. The length after co ...

  10. pipline脚本k8s版

    def label = "jnlp-slave" podTemplate(label: label, cloud: 'kubernetes',containers: [ conta ...