标签:个数 思路 ret tor cto turn 开始 bsp div
题目:Sliding Window Maximum
给定一个数组和滑动窗口的大小,窗口从开始位置每次向后滑动一格,找出每次窗口的最大值;
思路:
记录当前窗口的最大值下标,每次移动一格时,最小下标会移出窗口,邻接着的最大下标会移入窗口;
因此,每次窗口移动时,首先比较移入的是否比当前最大值还大,是则更新最大值;然后判断移出的是否是最大值,是则重新找最大值。
vector<int> LeetCode::maxSlidingWindow(vector<int>& nums, int k){ vector<int>arr; if (!nums.size())return arr; int max = 0; for (size_t i = 1; i < k && i < nums.size(); i++){//找第一个最大值 if (nums.at(i) >= nums.at(max))max = i; } arr.push_back(nums.at(max)); if (k >= nums.size())return arr; for (size_t i = k; i < nums.size(); i++){ if (nums.at(i) >= nums.at(max))max = i;//更新新窗口的最大值 else if (i - k >= max){//旧窗口的最大值移出去了,且新窗口的最大值小于移出去的最大值 //找新的最大值 ++max; for (size_t j = max + 1; j <= i; ++j){ if (nums.at(j) >= nums.at(max))max = j; } } arr.push_back(nums.at(max)); } return arr; }
[LeetCode]Sliding Window Maximum
标签:个数 思路 ret tor cto turn 开始 bsp div
原文地址:http://www.cnblogs.com/yeqluofwupheng/p/6819132.html