最大值减去最小值小于或等于num的子数组数量
2017-10-24 17:55
211 查看
import java.util.LinkedList;
//最大值减去最小值小于或等于num的子数组数量
public class getAllSubArray{
//获得子数组的数量
public static 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); //新的最小值加入qmin队列尾
while(!qmax.isEmpty()&&arr[qmax.peekLast()]<=arr[j])
{
qmax.pollLast();
}
qmax.addLast(j);//新的最大值加入qmax队列尾
if(arr[qmax.getFirst()]-arr[qmin.getFirst()]>num)
{
break;
}
j++;
}
if(qmin.peekLast()==i)
{
qmin.pollFirst();
}
if(qmax.peekFirst()==i)
{
qmax.pollFirst();
}
res+=j-i; //记录总的子数组的个数
i++;
}
return res;
}
//获得随机的数组
public static int [] getAarry(int leng)
{
if(leng==0)
{
return null;
}
int arr[]=new int[leng];
for(int i=0;i<leng;i++)
{
arr[i]=(int)(Math.random()*10);
}
return arr;
}
//打印获得的随机数组
public static void printAarry(int[]arr)
{
if(arr!=null)
{
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
}
}
public static void main(String[] args)
{
、
int []arr=getAarry(2);
printAarry(arr);
//获得满足条件的子数组的数量
System.out.println(" ");
System.out.println("子数组数量: "+getNum(arr,3));
}
}
相关文章推荐
- 左神的书——《程序员代码面试指南》之最大值减去最小值小于或等于num的子数组的数量 c++实现
- 数据结构 最大值减去最小值小于或等于num的子数组数量
- 1.10 最大值减去最小值小于或等于num的子数组数量
- 栈和队列---最大值减去最小值小于或等于num的子数组数量
- 最大值减去最小值小于或等于num的子数组数量
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- 最大值减去最小值小于或等于num的子数组数量
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- 最大值减去最小值小于或者等于num的子数组数量
- 最大值减去最小值小于或者等于num的子数组数量
- 最大值减去最小值小于等于num的子数组数量
- 子数组系列二:最大值减去最小值小于或等于 k 的子数组数量
- Codeing Interview: 最大值减去最小值小于或者等于num的子数组数量
- 【算法】最大值和最小值的差小于或者等于num的子数组数量
- 滑动窗口变形题-最大值减去最小值小于等于num的子数组
- 栈和队列(8)-- 最大值减去最小值小于或者等于num的子数组
- 有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
- 数组------写一个程序,产生25个随机数,对每个随机值,使用if-else 分类为大于、小于、等于
- 寻找数组中 的最大值最小值
- js中如何快速获取数组中的最大值最小值