卡码网 122. 滑动窗口最大值

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)
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值