122. 滑动窗口最大值
时间限制:1.000S 空间限制:256MB
题目描述
给定一个整数数组 nums 和一个整数 k,k 表示滑动窗口的大小。你需要找出每个滑动窗口中的最大值与最小值的差,并返回这些差的最大值。
输入描述
数组的长度为 n,1 <= n <= 10000,数组中的每个元素范围为[-10000,10000],滑动窗口大小k的范围为[1,n]。
输出描述
例如,给定一个字符串 "nums = [1,3,-1,-3,5,3,6,7], k = 3",表示一个数组和窗口大小 k。对于该数组中的每个窗口,计算最大值与最小值的差,并返回这些差值中的最大值。
在这个例子中,每个窗口的最大值与最小值的差分别为 [4, 6, 8, 8, 3, 4],因此最终返回的结果是 8。
输入示例
nums = [1,3,-1,-3,5,3,6,7], k = 3
输出示例
8
提示信息
题目输入是一个字符串,需要自己解析为数组和 k 值。
题目链接:https://kamacoder.com/problemcontest.php?cid=1046&pid=1
注意第二行写法是错误的,因为k不是一直是个位数。
input_str = input().strip()
# k = int(input_str[-1]) # 这个并不是总是成立的,例如k为两位数时
# 提取滑动窗口大小 k
k_index = input_str.rindex('=') + 1 # 定位到最后一个等号之后的位置
k = int(input_str[k_index:].strip()) # 从等号之后的位置开始截取子字符串,并转换为整数
num_l = num_r = 0
# for i in range(len(input_str)):
# if input_str[i] == "[":
# num_l = i+1
# if input_str[i] == "]":
# num_r = i
num_l = input_str.index('[') + 1
num_r = input_str.index(']')
num_s = input_str[num_l:num_r].split(',')
nums = list(map(int, num_s))
if k == 1:
print(0)
else:
left = 0
res = float("-inf")
for right in range(k - 1, len(nums)):
window = nums[left:right + 1]
max_num = max(window)
min_num = min(window)
sub = max_num - min_num
# print(max_num)
# print(min_num)
# print("=", sub)
res = max(res, sub)
left += 1
# print("res: ", res)
print(res)