• 日常机试练习 from【面经+高频+企业题库】


    拍照队形(1星)

    链接:https://www.nowcoder.com/questionTerminal/1b1f87ef6e7d40529d82c96aef79e8a4

    猿辅导公司的 N位(N>=4)研发同学组织了一次秋游活动,某同学带了个无人机在高空拍照,活动结束时,先拍了一张所有同学排成公司猴头Logo的照片, 接着有人提议再排成“猿”的首字母Y字形来拍一张合照。
    用字符串中的每一个字符(不是换行符或结束符'')代表一位老师,输出排好后的队形。要求 Y字除去中心点外,上下半部分等高,按照从左到右,从上到下进行排序。队形中没人的部分用空格占位。
    输入数据保证可以排出一个完整的Y字,即长度为 3k+1 (k>=1)

    例如: 7个 x ,排成队形为(为了方便说明,这里用‘-’代替空格):
    x---x
    -x-x
    --x
    --x
    --x
    ps:读入字符串,注意可能含空格
    import java.util.Scanner;//util里的Scanner
    public class Main{//Java要用class包在方法函数外面,才完整。
        public static void main(String[] args){ //String[] args必须要有,因为要传入参数
            Scanner sc=new Scanner(System.in);//System.in作为输入,放在括号里  //【Scanner】类,初始化
            int N=sc.nextInt();//.nextInt()输入的一位的int
            sc.nextLine();//.nextLine()输入换行
            String s=sc.nextLine();//.nextLine()整行作为输入(不会因为空格而断掉)
            int k=0;//记录String中的位置
            int n=N/3;
            for(int i=0;i<n;i++){
                for(int j=0;j<i;j++)System.out.print(" ");
                System.out.print(s.charAt(k++));
                for(int j=0;j<2*n-1-2*i;j++)System.out.print(" ");
                System.out.println(s.charAt(k++));//s.charAt(),使用String这种STL
             }
            for(int i=0;i<N-2*n;i++){
                for(int j=0;j<n;j++)System.out.print(" ");
                System.out.println(s.charAt(k++));
            }
        }
    }

    import java.util.Scanner;
    public class Main{
        public static void main(String[] args){
            Scanner sc=new Scanner(System.in);
            int n=sc.nextInt();
            int m1=1001;int m2=1001;int m3=1001;
            for(int i=0;i<n;i++){
                int temp=sc.nextInt();
                if( temp==m1 || temp==m2 || temp==m3 )continue;
                if(temp<m1){m3=m2;m2=m1;m1=temp;continue;}
                if(temp<m2){m3=m2;m2=temp;continue;}
                if(temp<m3){m3=temp;continue;}
            }
            if(m3==1001)System.out.print(-1);
            else System.out.print(m3);
        }
    }

    import java.util.Scanner;
    //import java.Math;//这个Math不用import!!!系统自带
    public class Main{
        public static void main(String[] args){
            Scanner sc=new Scanner(System.in);
            int N=sc.nextInt();
            int[] a=new int[N];//input原始位置信息
            for(int i=0;i<N;i++){
                a[i]=sc.nextInt();
            }
            int[] judge=new int[N];//计算judge[i]=(i-1~i)+(i~i+1)-(i-1~i+1)  //最大的judge[i]会被去掉
            int max=0;//初始化max,因为max一定>=0
            for(int i=1;i<=N-2;i++){
                judge[i]= Math.abs(a[i]-a[i-1]) + Math.abs(a[i+1]-a[i]) - Math.abs(a[i+1]-a[i-1]);
                if(judge[i]>max)max=judge[i];
            }
            int sum=0;
            for(int i=0;i<=N-2;i++){
                sum+=Math.abs(a[i+1]-a[i]);
            }
            sum-=max;
            System.out.println(sum);
        }
    }

    未考虑到中间的min哨兵的情况,所以70%的通过率:

    import java.util.Scanner;
    public class Main{
        public static void main(String[] args){
            Scanner sc=new Scanner(System.in);
            int N=sc.nextInt();
            int[] a=new int[N];
            for(int i=0;i<N;i++){
                a[i]=sc.nextInt();
            }
            
            int result=0;
            int index=-1;int lastindex=-1;
            while(true){
                int min=1001;//每轮重置
                for(int i=lastindex+1;i<N;i++){//找区间最小值
                    if(a[i]<min) {min=a[i];index=i;}
                }
                result+= (index-lastindex-1);
                
                if(index==N-1)break;//break的情况,while循环结束
                lastindex=index;
            }
            
            for(int i=0;i<N;i++){
                if(a[lastindex]<a[i] && a[i]<a[index]){
                    result++;//index和lastindex之间有数字(在升序下),所以要多一次移动
                    break;//直接break,不用flag
                }
            }
            System.out.println(result);
        }
    }

    华为机测

    import java.util.Scanner;
    public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int stu = sc.nextInt();
            int ops = sc.nextInt();
            int[] score = new int [stu+1];
            for(int i=1; i<=stu; ++i){
                score[i]=sc.nextInt();
            }
            for(int i=1;i<=ops; ++i){
                String type = sc.next();
                if(type.equals("Q")){
                    int left = sc.nextInt();
                    int right = sc.nextInt();
                    int max = score[left];
                    for(int k=left+1; k<=right; ++k){
                        if(score[k]>max) max= score[k];
                    }
                    System.out.println(max);
                }
                else if(type.equals("U")){
                    int key = sc.nextInt();
                    int value = sc.nextInt();
                    score[key]=value;
                }
            }
        }
    }
    import java.util.Scanner;
    public class Main{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            String[] names = new String[1000];
            String[] shortNames = new String[1000];
            int[] lines = new int[1000];
            int[] number = new int[1000];
            int index = 0;//下标,作为4个数组的id  //这是没有实体类的替代品
            while(sc.hasNextLine()){
                String originName = sc.next();
                int line = sc.nextInt();
                String name = originName.substring(1 + originName.lastIndexOf("\"));
                boolean dupFlag = false;
                for(int i=0; i<index; ++i){
                    if(names[i]==name && lines[i]==line){
                        dupFlag = true;
                        ++number[i];
                        break;
                    }
                }
                if(dupFlag == false){
                    names[index] = name;
                    lines[index] = line;
                    number[index] = 1;
                    ++index;
                }
            }
            for(int i=0; i<=index; ++i){
                int length = names[i].length();
                if(length<=16){
                    shortNames[i] = names[i];
                }
                else{
                    shortNames[i] = names[i].substring(length-16);
                }
            }
            //top-8
            //找到一个打印一个,然后将number置0,反正也不用了
            for(int top=0; top<8; ++top){
                int maxNum = 0;
                int maxIndex = 0;
                for(int i=0; i<=index; ++i){
                    if(maxNum < number[i]){
                        maxNum = number[i];
                        maxIndex = i;
                    }
                }
                //打印
                System.out.println(shortNames[maxIndex] +" "+ lines[maxIndex] +" "+ maxNum);
                //置0
                number[maxIndex]=0;
            }
        }
    }
  • 相关阅读:
    mysql远程执行sql脚本
    数据库死锁
    sqlserver 数据库之调优
    sqlserver 数据库之性能优化
    Session共享的解决办法
    关于对session机制的理解--通俗易懂
    kafka之常用命令
    分布式消息队列之kafka
    vuejs调试代码
    json
  • 原文地址:https://www.cnblogs.com/qyf2199/p/12497873.html
Copyright © 2020-2023  润新知