一. 最大子数组
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
样例
样例1:
输入:[−2,2,−3,4,−1,2,1,−5,3] 输出:6 解释:符合要求的子数组为[4,−1,2,1],其最大和为 6。
样例2:
输入:[1,2,3,4] 输出:10 解释:符合要求的子数组为[1,2,3,4],其最大和为 10。
挑战
要求时间复杂度为O(n)
注意事项
子数组最少包含一个数
输入测试数据 (每行一个参数)如何理解测试数据?
第一种解法:O(n)时间复杂度
class Solution:
"""
@param nums: A list of integers
@return: A integer indicate the sum of max subarray
"""
def maxSubArray(self, nums):
# write your code here
'''
做两步判断:
1.第一步判断:当n > 0 的时候,继续加。如果n小于0,则n取最新的数,之前的舍弃
2.第二步判断:sum 和 继续加的n作比较,如果sum < n,那么sum = n,否则sum保持。
'''
sum = nums[0]
n = nums[0]
for i in range(1,len(nums)):
if n > 0:
n = n + nums[i]
else: #一旦n < 0,舍弃,取新的值n进行继续相加
n = nums[i]
if sum < n:
sum = n
return sum
第二种解法:O(n2)时间复杂度
def MaxSumArray(nums):
'''
1.取出所有符合条件的顺序数组
2.然后将所有顺序数组的值放在一个大的数组[]里面,最后返回里面的最大值max
:param nums:
:return:
'''
array = []
for i in range(len(nums)):
for j in range(i + 1,len(nums)):
array.append(sum(nums[i:j]))
return max(array)
result = MaxSumArray([-2,2,-3,4,-1,2,1,-5,3])
print(result)
二. 最小子数组
给定一个整数数组,找到一个具有最小和的连续子数组。返回其最小和。
样例
样例 1
输入:[1, -1, -2, 1] 输出:-3
样例 2
输入:[1, -1, -2, 1, -4] 输出:-6
注意事项
子数组最少包含一个数字
class Solution:
"""
@param: nums: a list of integers
@return: A integer indicate the sum of minimum subarray
"""
def minSubArray(self, nums):
# write your code here
'''
1.负数一直相加,一旦大于0,则被替换
2.sum 记录之前保存最小值的和,如果一旦有出现更小的和的话,则被替换
:param nums:
:return:
'''
n = nums[0]
sum = nums[0]
for i in range(1,len(nums)):
if n < 0:
n = n + nums[i]
else:
n = nums[i]
if sum > n:
sum = n
return sum
三. 数组剔除元素后的乘积
中文English
给定一个整数数组A。
定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。请输出B。
样例
样例 1
输入: A = [1, 2, 3] 输出: [6, 3, 2] 解析:B[0] = A[1] * A[2] = 6; B[1] = A[0] * A[2] = 3; B[2] = A[0] * A[1] = 2
class Solution:
"""
@param: nums: Given an integers array A
@return: A long long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]
"""
def productExcludeItself(self, nums):
# write your code here
array = []
for i in range(len(nums)):
sum = 1
for j in range(len(nums)):
if i != j:
sum = sum * nums[j]
array.append(sum)
return array
来源:https://www.cnblogs.com/yunxintryyoubest/p/12181669.html