窗口内最大值与最小值的更新结构

Posted e-dreamer-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了窗口内最大值与最小值的更新结构相关的知识,希望对你有一定的参考价值。

Ps: 实现一个窗口内的最大值与最小值更新结构,使用双端队列。

这里以数组内有多少组两数之差小于特定的number为例。 

class Solution {
public: 
	int getNum(vector<int> arr, int num) {
		if (arr.size() == 0) return 0;
		// 使用双端队列
		deque<int> dq_min;
		deque<int> dq_max; 
		int i = 0;
		int j = 0;
		int res = 0;
		while (i < arr.size()) {
			while (j < arr.size()) {
				// 窗口最小值更新结构
				while (!dq_min.empty() && dq_min.back() >= arr[i]) {
					dq_min.pop_back();
				}
				dq_min.push_back(j); 
                                // 窗口最大值更新结构
				while (!dq_max.empty() && dq_max.back() <= arr[i]) {
					dq_max.pop_back();
				}
				dq_max.push_back(j);
				if (arr[dq_max.front()] - arr[dq_min.front()] > num) {
					break;
				}
				j++;
			}
			// 弹出结构
			if (dq_min.front() = i) {
				dq_min.pop_front(); 
			}
			if (dq_max.front() == i) {
				dq_max.pop_front(); 
			}
			res += j - i; // 窗口最大值- 窗口最小值 <= num , 窗口内更小于
			i++;
		}
		return res; 
	}                      

  

以上是关于窗口内最大值与最小值的更新结构的主要内容,如果未能解决你的问题,请参考以下文章

滑动窗口

用于在多张纸上循环的范围内查找最大值和最小值的 VBA 代码

单调队列&单调栈归纳

找出一组数组中最大值最大值的角标最小值最小值的角标及平均数

sql 查询一行内几列的平均值,最大值,最小值,怎么写

908. 最小差值 I