算法總結之 最大值減去最小值或等於num的子數組數量
阿新 • • 發佈:2017-09-13
ava clas 最小值 amp get max brush logs ise
給定數組arr和整數num,共返回有多少個子數組滿足 <= num
數組長度N 時間復雜度O(N)
package TT; import java.util.LinkedList; public class Test127 { 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(); } qmax.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; } }
算法總結之 最大值減去最小值或等於num的子數組數量