• 百度算法题回忆


    百度2020日常实习 - Java

    @2020.3.29晚上:

    (1)题目给出n,求所有(1<=a,b<=n)可能的a与b中:

    计算(最小公倍数 - 最大公约数)的最大值:

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            long n=sc.nextLong(); //这里的n用的是【long】,而不是int  //用int通过率30%
            long result=n*(n-1)-1;//【巧妙分析,不用一个个试】
            System.out.print(result);
        }
    }

    (2)给出n个数a[i],每次最大的减去n,其余+1,

    直到a[i]中最大的数小于n为止,统计“减n”操作的次数:k

        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n=sc.nextInt();
            long[] a=new long[n+1];//因为a[i]属于1~10^18,所以用long,而不是int
    
            for(int i=0;i<n;i++){
                a[i]=sc.nextLong();//nextLong()
            }
            long k=0;
            while(true){
                long max=0;
                int index=0;
                for(int i=0;i<n;++i){
                    if(max<a[i]){
                        max=a[i];
                        index=i;
                    }
                }
                if(max<n)break;
                long temp=(a[index]-n)/n; //注意temp的类型
                if(temp<1)temp=1;
                a[index]=a[index]-n*temp;//【一次减去temp次的n,不然时间复杂度爆表】 //在这个修改之前,一直显示系统超时————“循环错误或者复杂度过高”
                for(int i=0;i<n;++i){
                    if(i!=index)a[i]+=temp;//
                }
                k+=temp;
            }
            System.out.print(k);//【我们只需要次数k,不用完全模拟过程,要加速中间的步骤】
        }
    }

    笔试当天上午的:输入输出格式练习,起到了很大的作用&启发:https://www.cnblogs.com/qyf2199/p/12590097.html

  • 相关阅读:
    mybatis显示sql语句 log4j.properties配置文件
    Netty 4.0 demo
    Netty多线程处理机制
    crontab定时任务中文乱码问题
    linux grep、find 命令详解
    resin access.log format配置详解
    linux top命令详解
    正则表达式介绍及案例分享
    java定时任务
    rhApp遇到的项目问题
  • 原文地址:https://www.cnblogs.com/qyf2199/p/12597578.html
Copyright © 2020-2023  润新知