9.18晚上网易笔试交流,想问下自己的思路哪里有问题




import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.next();
        int n = str.length();
        int m = in.nextInt();
        int[] ds = new int[n-1];
        for(int i=0;i<n-1;++i){
            ds[i] = dis(str.charAt(i),str.charAt(i+1));
        }
        int sum = 1;
        for(int i=0;i<n-1;++i){
            sum+=ds[i];
            sum++;
        }
        if(m==0){
            System.out.println(sum);
            return;
        }
        int[] ds_sum = new int[n];
        ds_sum[0] = 0;
        for(int i=1;i<=m;++i){
            ds_sum[i] = ds_sum[i-1]+ds[i-1];
        }
        for(int i=m+1;i<n;++i){
            ds_sum[i] = ds_sum[i-1]+ds[i-1];
            ds_sum[i] -= ds_sum[i-m];
        }
        int max = 0;
        for(int i=m;i<n;++i){
            max = Math.max(max,ds_sum[i]);
        }
        if(max>m){
            sum -= (max-m);
        }
        System.out.println(sum);
    }
    public static int dis(char c1,char c2){
        int d = Math.abs((int)c2-(int)c1);
        d = Math.min(26 - d, d);
        return d;
    }
}
这是第二题,思路就是计算连续m个字符间距离最大的一组,让这一组使用魔法移动,但是通过率只有六成左右
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long s = in.nextLong();
        long ss = s;
        if(s==0){
            System.out.println(-1);
            return;
        }
        long p = 1;
        while((long)(2)*p<=s){
            p = (long)(2)*p;
        }

        ArrayList<Integer> binary = new ArrayList<Integer>();
        while(p>(long)0){
            if((long)s>=(long)p){
                s = s-p;
                binary.add(1);
            }else{
                binary.add(0);
            }
            p = p/(long)2;
        }
        int res1 = 0;
        for (Integer integer : binary) {
            if (integer == 1) {
                res1++;
            }
        }
        if(ss%(long)2==1){
            System.out.println(res1);
            return;
        }
        int res2 = 0;
        int firstone = binary.size();
        for(int i=binary.size()-1;i>-1;--i){
            if(binary.get(i)==1){
                firstone = i;
                res2 = 2;
                break;
            }
        }
        for(int i=firstone;i>-1;--i){
            if(binary.get(i)==0){
                res2++;
            }
        }
        System.out.println(Math.min(res1, res2));
        return;
    }
}

这是第三题,思路是两种方案比较最小值。二进制化,方案一是直接数1的数量(作和),方案二是计算最右边的1左边0的数量,然后+2(把最右边的1左边的0全部补为1,最右边为1的位再加1得到一个100...000,逆向这个过程就是结果),但只有七成通过率









#网易笔试##网易##笔试题目#
全部评论
import java.util.Scanner; public class Test {     int time = 0;     public static void main(String[] args) {         Test test = new Test();         Scanner sc = new Scanner(System.in);         int num = sc.nextInt();         System.out.println(test.dfs(num));     }     public int dfs(int num){         if(num==0) return num;         for (int i = 0; i < num; i++) {             int min = (int)Math.pow(2,i),max = (int)Math.pow(2,i+1);             int left = num-min,right = max-num;             if(min <= num && max >= num){                 time++;                 if(min==num||max==num){                     return time;                 }else if(left == right && left!=0){                     dfs(left);                 }else if((left)<(right)){                     dfs(left);                 }else if((left)>(right)){                     dfs(right);                 }else return time;             }         }         return time;     } } 这是我替同学做的,现在也不知道对不对,最后也没测试,不知道可不可以全过
点赞 回复 分享
发布于 2021-09-19 11:54

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
评论
1
4
分享
牛客网
牛客企业服务