- 题目描述
给定一个数组nums和窗口大小win,每个win种的最大值为maxNum,最小值为minNum,求出该数组所有窗maxNum和minNum的最大差值。
示例1:
输入:
nums = [2, 3, 5, 7, 6, 8, 1];
win = 3
输出:
7
解析:
第1个长度为3的窗口:[2,3,5] maxNum = 5, minNum = 2, 5 - 2 = 3,maxDis = 3
第2个长度为3的窗口:[3,5,7] maxNum = 7, minNum = 3, 7 - 3 = 4 > maxDis, maxDis = 4
第3个长度为3的窗口:[5,7,6] maxNum = 7, minNum = 5, 7 - 5 = 2 < maxDis, maxDis = 4
第4个长度为3的窗口:[7,6,8] maxNum = 8, minNum = 6, 8 - 6 = 2 < maxDis, maxDis = 4
第4个长度为3的窗口:[6,8,1] maxNum = 8, minNum = 1, 8 - 1 = 7 > maxDis, maxDis = 7
- c++代码实现
#include <iostream>
#include <vector>
#include <set>
#include <queue>
using namespace std;
class Solution {
public:
int slove(vector<int> nums, int win) {
int ans = INT32_MIN;
queue<int> wins;
set<int> data;
for (int i = 0; i < nums.size(); ++i) {
if (i < win) {
wins.push(nums[i]);
data.insert(nums[i]);
continue;
} else {
data.erase(wins.front());
data.insert(nums[i]);
wins.pop();
wins.push(nums[i]);
}
ans = max(ans, *data.rbegin() - *data.begin());
}
return ans;
}
};
int main() {
vector<int> nums = {2, 3, 5, 7, 6, 8, 1};
int win = 3;
Solution so;
cout << so.slove(nums, win);
return 0;
}
- 运行结果如下: