题解 | #最大值减去最小值小于或等于num的子数组数量#

import java.util.;
import java.io.
;
public class Main{
public static int getNum(int []arr,int num){
if(arr==null||arr.length==0||num<0){
return 0;
}
LinkedList<integer> qmin= new LinkedList<integer>();
LinkedList<integer> qmax= new LinkedList<integer>();
int i=0;
int j=0;
int res=0;</integer></integer></integer></integer>

    while(i<arr.length){
        while(j<arr.length){

            //到j不满足条件,所以[i+1..j]不一定满足条件
            //保证qmin尾部为j位置
            if(qmin.isEmpty()||qmin.peekLast()!=j){
                //qmin尾部对应元素比arr[j]大,更换qmin
                //必须保证qmin队尾最小
                while(!qmin.isEmpty()&&arr[qmin.peekLast()]>=arr[j]){
                    qmin.pollLast();
                }
                qmin.addLast(j);
                //必须保证qmax的队尾最大
                while(!qmax.isEmpty()&&arr[qmax.peekLast()]<=arr[j]){
                    qmax.pollLast();
                }
                qmax.addLast(j);
            }
            //qmax的最小值 - qmin的最大值
            if(arr[qmax.getFirst()]-arr[qmin.getFirst()]>num){
                break;
            }
            j++;
        }
        res+=j-i;
        //开头i要自增,应该把队列中的i移除,只可能在最大和最小地方出现,要不就提前被弹出了
        if(qmin.peekFirst()==i){
            qmin.pollFirst();
        }
        if(qmax.peekFirst()==i){
            qmax.pollFirst();
        }
        i++;
    }

    return res;
//getNum结束    
}

public static void main(String[] args)throws IOException {
    BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
    int n,num;
    String[] line1 = in.readLine().split(" ");
    n=Integer.parseInt(line1[0]);
    num=Integer.parseInt(line1[1]);
    String[] arr = in.readLine().split(" ");
    int []data=new int[n];
    for(int i=0;i<n;i++){
        data[i]=Integer.parseInt(arr[i]);
    }

    int result =getNum(data,num);
    System.out.println(result);

}

}

全部评论

相关推荐

点赞 评论 收藏
分享
完美的潜伏者许愿简历通过:我上表jd,请求封我做后端大将军的事,北京有消息了:竟然不许!!! 他们一定是看我没有实习,这才故意驳回我的请求!
点赞 评论 收藏
分享
04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务