日常机试练习 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;
        }
    }
}
原文地址:https://www.cnblogs.com/qyf2199/p/12497873.html