zoukankan      html  css  js  c++  java
  • Java集合之LinkedList

    Deque

    • 定义
    C++:deque
    Java:LinkedList
    
    • 创建与其基本操作
    创建:
    LinkedList qmax=new LinkedList<Integer>();
    基本操作:
    void clear( )
    int peekFirst();
    int peekLast();
    int pollFirst();
    int pollLast();
    int addFirst(Object o);
    int addLast(Object o);
    

    例题


    计算数组中所有满足以下条件的区间个数
    区间最大值-区间最小值>=x

    设定区间左端点不变,右端点右移,那么区间最大值减最小值显然是单调递增的。
    利用单调性
    二分解法搭配RMQ可以做到O(nlogn)
    双指针搭配单调队列可以做到O(n)

    public long solve(int[] arr,int n,int x) {
    		if(arr==null||arr.length==0) return 0;
    		LinkedList<Integer> qmax=new LinkedList<Integer>();
    		LinkedList<Integer> qmin=new LinkedList<Integer>();
    		int l=0,r=0,tr,t2r = 0;
    		long res=0;
    		while(l<n) {
    			while(r<n) {
    			   while(!qmax.isEmpty()&&arr[qmax.peekLast()]<=arr[r]) qmax.pollLast();
    			   while(!qmin.isEmpty()&&arr[qmin.peekLast()]>=arr[r]) qmin.pollLast();
    			   qmax.addLast(r);qmin.addLast(r);
    			   if(arr[qmax.peekFirst()]-arr[qmin.peekFirst()]>x) break;
    			   r++;
    			}
    			res+=r-l;
    			if(qmax.peekFirst()==l) qmax.pollFirst();
    			if(qmin.peekFirst()==l) qmin.pollFirst();
    			l++;
    		}
    		return res;
    }
    
  • 相关阅读:
    tar.gz文件
    Ruby Symbol
    Ruby表达式
    Linux相关命令
    Ruby file
    Tomcat优化
    修改Linux文件的所属用户和组
    Ruby String
    Ruby Range
    HTML5开源专业图像处理引擎——AlloyImage(简称AI)
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/7657951.html
Copyright © 2011-2022 走看看