题目:一个整数数组,只能从两头一次一个取k个,要求k个和最大,问怎么取
分析:(变换思路)
例如 nums = [ 1, 1, 3, 2, 100, 2, 0] k = 3
求两边k个元素最大,可是中间的元素最小
长度为4(len(nums)-k)滑窗可以解决
来源:百度面试题
代码:
def max_margain_k(nums, k):
n = len(nums) # 7
length = n - k # 4
min_sum = sum(nums[:length])
start = 0
for i in range(1, k + 1):
temp_sum = sum(nums[i:i + length])
if temp_sum < min_sum:
min_sum, start = temp_sum, i
res = []
for i in range(0, start):
res.append(nums[i])
for i in range(start + length, len(nums)):
res.append(nums[i])
print(res, sum(nums)-min_sum)
nums = [1, 1, 3, 2, 100, 2, 0]
k = 3
max_margain_k(nums, k)
路虽远,行则将至。事虽难,做则必成