最大值减去最小值小于或等于num的子数组数量
来源:互联网 发布:mysql查询分析器下载 编辑:程序博客网 时间:2024/06/05 17:08
思路:分别用两个双端队列qmax和qmin存放当前子数组的最大值和最小值更新结构。
分析题目,若子数组arr[i…j]满足条件,则其中的每一个子数组均满足条件;若arr[i..j]不满足条件,所有包含他的子数组都不满足条件
I从左到右遍历数组,另j不断向右移动,并更新qmax和qmin当出现arr[i…j]不满足条件的情况,j向右停止,以arr[i]作为第一个元素的子数组,满足条件的数量为j-i个。
另i向右移动一个位置,并对qmax和qmin做出相应的更新,重复上述步骤
依次得出以arr[0],arr[1],…arr[n-1]为第一个元素的子数组的数量,相加即可。
public int getNum(int[] arr,int num){ if(arr==null||arr.length == 0){ return 0; } LinkedList<Integer> qmin = new LinkedList<Integer>(); LinkedList<Integer> qmax = new LinkedList<Integer>(); int i = 0; int j = 0; int res = 0; while(i < arr.length){ while(j < arr.length){ while(!qmin.isEmpty()&&arr[qmin.peekLast()]>=arr[j]) qmin.pollLast(); qmin.addLast(j); while(!qmax.isEmpty()&&arr[qmax.peekLast()]<=arr[j]) qmax.pollLast(); qmin.addLast(j); if(arr[qmax.getFirst()]-arr[qmin.getFirst()]>num) break; j++; } if(qmin.peekFirst()==i) qmin.pollFirst(); if(qmax.peekFirst()==i) qmax.pollFirst(); res+=j-i; i++; } return res; }
阅读全文
0 0
- 最大值减去最小值小于等于num的子数组数量
- 数据结构 最大值减去最小值小于或等于num的子数组数量
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- 最大值减去最小值小于或等于num的子数组数量
- 最大值减去最小值小于或等于num的子数组数量
- 栈和队列---最大值减去最小值小于或等于num的子数组数量
- 最大值减去最小值小于或等于num的子数组数量
- 栈和队列——最大值减去最小值小于或等于num的子数组数量
- 1.10 最大值减去最小值小于或等于num的子数组数量
- 最大值减去最小值小于或者等于num的子数组数量
- 子数组系列二:最大值减去最小值小于或等于 k 的子数组数量
- 左神的书——《程序员代码面试指南》之最大值减去最小值小于或等于num的子数组的数量 c++实现
- 栈和队列(8)-- 最大值减去最小值小于或者等于num的子数组
- 滑动窗口变形题-最大值减去最小值小于等于num的子数组
- 【算法】最大值和最小值的差小于或者等于num的子数组数量
- 未排序数组中累加和小于或等于给定值的最长子数组长度
- 数组与矩阵---未排序数组中累加和小于或等于给定值的最长子数组问题
- 安装Paramiko模块
- INI文件读写
- 【Angular2】组件交互
- const实现的机制
- mapreduce内存溢出,导致Killing container问题
- 最大值减去最小值小于或等于num的子数组数量
- poj 2533 Longest Ordered Subsequence (最长递增子序列)
- TCP/IP协议
- 雷鸣的游戏人生(一) --- 三个笑话
- 获取验证码 HTTP Status 500
- 第48篇 字符编码探密--ASCII,UTF8,GBK,Unicode
- 两道2017华为校招Java面试题
- 《大唐姻缘传》 (李治篇)第四章 勤政事朕染风疾 同一心开疆拓土
- rem单位适配