给定一个数组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
- #include
- #include
- #include
- #include
-
- 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;
- }
