小红书笔试为啥第三题出错了,大家帮我看看

public class SMB03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int k = sc.nextInt();
            int[] nums = new int[n];
            for(int i=0;i<n;i++){
                nums[i]= sc.nextInt();
            }
            int[][] search = new int[k][2];
            for(int i=0;i<k;i++){
                int x = sc.nextInt();
                int y = sc.nextInt();
                search[i][0] = x;
                search[i][1] = y;
            }
            for(int[] everySearch:search){
                System.out.println(getAnswer(nums,everySearch,n));
            }
//            int[] a = {2,8,4,5,3,6};
//            int[] b = {1,5};
//            int d = 6;
//            System.out.println(getAnswer(a,b,d));
        }

    }
    public static int getAnswer(int[] nums,int[] es,int n){
        if(es[0] == es[1]){
            return 0;
        }
        int l = es[0]-1;
        int r = es[1];
        int maxPro = 0;
        int minPro = Integer.MAX_VALUE;
        for(int i=0;i<r;i++){
            if(nums[i]<minPro){
                minPro = nums[i];
            }else if(nums[i] - minPro > maxPro ){
                maxPro = nums[i] - minPro;
            }
        }
        return maxPro;
    }
}

#小红书##笔经#
全部评论
最后一题是要用线段树
1 回复 分享
发布于 2022-03-13 23:03
这题有个rmq算法可以解,板子题
点赞 回复 分享
发布于 2022-03-13 23:18
你这个会超时吧, n好像是50000 m好像是2000000,假设最坏情况,搜索区间永远是1~n,搜索200000次, 你这要计算 200000*50000次,直接超时了。
点赞 回复 分享
发布于 2022-03-13 21:11
第一题64% public class SMB01 {     public static void main(String[] args) {         Scanner input = new Scanner(System.in);         while(input.hasNext()){             int len = input.nextInt();             int[] nums = new int[len];             for(int i=0;i<len;i++){                 nums[i] = input.nextInt();             }             System.out.println(getMaxOne(nums,len));         }     }     public static int getMaxOne(int[] nums,int m){         //这里得到sum(1-a)的最大值         if(m==0) return -1;         int res = 0;         for(int i = 0;i<m;i++){             int lSum = 0,rSum = 0,j=i;             if(i==0){                 lSum = 0;             }else {                 lSum += nums[i-1];             }             while(j<m){                 rSum = Math.max(rSum,rSum+(1-nums[j]));                 j++;             }             res = Math.max(res,rSum+lSum);         }         return res;     } }
点赞 回复 分享
发布于 2022-03-13 21:11
第二题50% public class SMB02 {     public static void main(String[] args) { #字数不允许             System.out.println(getAllSolu(matrix));         }     }     public static int  getAllSolu(int[][] matrix){         int m = matrix.length;         int n = matrix[0].length;         int[][] sm = new int[m][n];         sm[0][0] = 1;         for(int j=0;j<m;j++){             if(matrix[0][j]==1){                 sm[0][j] = 0;             }else{                 sm[0][j] = sm[0][j-1];             }         }         for(int i=0;i<m;i++){             if(matrix[i][0]==1){                 sm[i][0] = 0;             }else{                 sm[i][0] = sm[i-1][0];             }         }         for(int i=1;i<m;i++){             for(int j=1;j<n;j++){                 if(matrix[i][j]==1){                     sm[i][j] = 0;                 }else{                     sm[i][j] = sm[i-1][j] + sm[i][j-1];                 }             }         }         return sm[m-1][n-1];     } }
点赞 回复 分享
发布于 2022-03-13 21:13
超时了  从输出结果上来看超时了不一定会给你提示的
点赞 回复 分享
发布于 2022-03-13 21:13
你三题总共几分,小红书hc好少
点赞 回复 分享
发布于 2022-03-14 02:51
这是什么岗位
点赞 回复 分享
发布于 2022-03-22 19:21

相关推荐

牛仔知道哦:你是我见过最美的牛客女孩
点赞 评论 收藏
分享
起名字真难233:人家只有找猴子的预算,来个齐天大圣他们驾驭不住呀😂😂
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客企业服务