首页 > 4.27拼多多笔试
头像
可乐kk
编辑于 2021-04-27 21:19
+ 关注

4.27拼多多笔试

不知道这几题有没有问题,大佬进来帮忙看看。
第二题,直接找最长的0子串。
// 最长连续子串
public class pdd2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        int basecount = 0;
        for(int i=0; i<n; i++) {
            a[i] = sc.nextInt();
            if (a[i] == 1) {
                basecount ++;
            }

        }
        System.out.println(basecount + answer(a));
    }
    public static int answer(int[] a){
        int max = Integer.MIN_VALUE;
        int current = 0;
        for(int i=0; i<a.length; i++) {
            if (a[i] == 0) {
                current++;
            } else {
                current = 0;
            }
            if (current > max) {
                max = current;
            }
        }
        return max;
    }
}

第四题,贪心做的感觉不太对。
// 冰冻青蛙
public class pdd4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = scanner.nextInt();
        for(int i=0; i<t; i++) {
            Integer n = scanner.nextInt();
            Long m = scanner.nextLong();
            Long k = scanner.nextLong();
            ArrayList<Long> a= new ArrayList<>();
            for(int j=0; j<n; j++) {
                a.add(scanner.nextLong());
            }
            System.out.println(answer(n,m,k,a));
        }
    }

    public static Long answer(Integer n, Long m, Long k, ArrayList<Long> a) {
        Long[] dp = new Long[n];
        int pos = 0;
        for(int i=0; i<n; i++) {
            dp[i] = a.get(i);
        }
        dp[1] = dp[1]-k;
        for(int i=2; i<=m; i++) {
            if (pos-1 < 0) {
                dp[pos+1] = dp[pos+1]-k;
                pos++;
                continue;
            }
            if (pos+1 >= n) {
                dp[pos-1] = dp[pos-1]-k;
                pos--;
                continue;
            }
            if (dp[pos+1] < dp[pos-1] ) {
                dp[pos-1] = dp[pos-1] - k;
                pos --;
            } else {
                dp[pos+1] = dp[pos+1] - k;
                pos ++;
            }
        }
        Long min = Long.MAX_VALUE;
        for (int j=0; j<n; j++) {
            if (dp[j] < min) {
                min = dp[j];
            }
        }
        return min;
    }
}


全部评论

(13) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐