贝壳校招笔试编程题(2019.08.10)

1. 题目描述:
 * 给出n个正整数,要求找出相邻两个数字中差的绝对值最小的一对数字,如果有差的绝对值相同的,则输出最前面的一对数。
 *
 * 2<n<=100,正整数都在10^16范围内
 *
 * 输入
 * 输入包含2行,第一行为n,第二行是n个用空格分隔的正整数。
 *
 * 输出
 * 输出包含一行两个正整数,要求按照原来的顺序输出
 *
 *
 * 样例输入
 * 9
 * 1 3 4 7 2 6 5 12 32
 * 样例输出
 * 3 4
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        long[] arrs = new long[num];
        for (int i = 0; i < num; i++) {
            arrs[i] = scanner.nextLong();
        }
        long sum = Long.MAX_VALUE;
        int t = 0;
        int start = 0;
        int end = 0;
        for (int i = 0; i < num - 1; i++) {
            if (Math.abs(arrs[i + 1] - arrs[i]) < sum) {
                sum = Math.abs(arrs[i + 1] - arrs[i]);
                start = i;
                end = i + 1;

            }
        }
        System.out.println(arrs[start] + " " + arrs[end]);
    }
}

这个是100%通过

2. 题目描述:
 * 小希偶然得到了传说中的月光宝盒,然而打开月光宝盒需要一串密码。虽然小希并不知道密码具体是什么,但是月光宝盒的说明书上有着一个长度为 n (2 <= N <= 50000)的序列 a (-10^9 <= a[i] <= 10^9)的范围内。下面写着一段话:密码是这个序列的最长的严格上升子序列的长度(严格上升子序列是指,子序列的元素是严格递增的,例如: [5,1,6,2,4]的最长严格上升子序列为[1,2,4]),请你帮小希找到这个密码。
 *
 *
 * 输入
 * 第1行:1个数N,N为序列的长度(2<=N<=50000)
 *
 * 第2到 N+1行:每行1个数,对应序列的元素(-10^9 <= a[i] <= 10^9)
 *
 * 输出
 * 一个正整数表示严格最长上升子序列的长度
 *
 *
 * 样例输入
 * 8
 * 5
 * 1
 * 6
 * 8
 * 2
 * 4
 * 5
 * 10
 * 样例输出
 * 5
import java.util.Scanner;

public class Test{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        int[] arrs = new int  [num];
        for (int i = 0; i < num; i++) {
            arrs[i] = scanner.nextInt();
        }
        System.out.println(lis(arrs));
    }

    public static int lis(int[]array){
        int length=array.length;
        if(length==0){
            return 0;
        }
        int maxCount=0;
        int[] dp=new int[length];
        for (int i = 0; i < length; i++) {
            dp[i]=1;
            for(int j=0;j<i;j++){
                if(array[j]<array[i]&&dp[i]<dp[j]+1){
                    dp[i]=dp[j]+1;
                }
                if(maxCount<dp[i]){
                    maxCount=dp[i];
                }

            }

        }
        return maxCount;
    }
}

这个通过只有82%,暂时还未知原因

3.题目描述:
 * 举重大赛开始了,为了保证公平,要求比赛的双方体重较小值要大于等于较大值的90%,那么对于这N个人最多能进行多少场比赛呢,任意两人之间最多进行一场比赛。
 *
 * 输入
 * 第一行N,表示参赛人数(2<=N<=10^5)
 *
 * 第二行N个正整数表示体重(0<体重<=10^8)
 *
 * 输出
 * 一个数,表示最多能进行的比赛场数
 *
 *
 * 样例输入
 * 5
 * 1 1 1 1 1
 * 样例输出
 * 10
import java.util.Arrays;
import java.util.Scanner;

public class Test{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        int[] arrs = new int[num];
        for (int i = 0; i < num; i++) {
            arrs[i] = scanner.nextInt();
        }

        int count=0;
        Arrays.sort(arrs);

        for(int i=0;i<arrs.length;i++){
            for(int j=i+1;j<arrs.length;j++){
                if(Math.min(arrs[i],arrs[j])>=Math.max(arrs[i],arrs[j])*0.9){
                    count++;
                }else{
                    break;
                }
            }
        }

        System.out.println(count);
    }
}

这个通过是100%

4. 题目描述:
 * 小C在做一种特殊的服务器负载测试,对于一个请求队列中的请求,每一个请求都有一个负荷值,为了保证服务器稳定,请求队列中的请求负荷必须按照先递增后递减的规律(仅递增,仅递减也可以),比如[ 1,2,8,4,3 ],[ 1,3,5 ]和[ 10 ]这些是满足规律的,还有一些不满足的,比如[ 1,2,2,1 ],[ 2,1,2 ]和[ 10,10 ]。现在给你一个请求队列,你可以对请求的负荷值进行增加,要求你调整队列中请求的负荷值,使数组满足条件。最后输出使队列满足条件最小的增加总和。
 *
 * 输入
 * 输入有两行,第一行是N (1≤n≤5000) ,代表请求队列中的请求数量。
 *
 * 第二行有N个数字 a1,a2…an  (1≤ai≤10^9)。Ai是第i个请求的负荷值。
 *
 * 输出
 * 输出这个最小增加总和
 *
 *
 * 样例输入
 * 5
 * 1 4 3 2 5
 * 样例输出
 * 6
 *
 * 提示
 * 样例解释,此时合法队列为[1,4,5,6,5],最小增加和为6

这个题没做出来

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值