网易软开笔试JAVA---前两道求指点

网易软开第一题,成绩排序,自己当时没有考虑相等情况,所以会导致通过率0,现在改成这样,麻烦各位大佬看是不是有问题,我的思路是这样,将输入成绩读入到score中,接着使用另为一个数组sorted对其进行按大到小sort,在需要查询第几个学生成绩的时候,首先在score中找到这个学生所对应的成绩,接着在sorted中找到成绩所对应的下标,找到后,例如找到的是i,那么直接是score.length-i-1/score.length,接着直接break,这样就算有相等的,也不会影响,因为是从大到小排序,例如有两个98,找到第一个98后会直接输出,然后break。

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while ( sc.hasNextInt() ) {
            int num = sc.nextInt();
            int[] score = new int[num];
            for (int i = 0; i < num; i++) {
                score[i] = sc.nextInt();
            }
            Integer[] sorted = new Integer[num];
            for (int i = 0; i < num; i++) {
                sorted[i] = score[i];
            }
            Arrays.sort(sorted, (o1, o2) -> o2 - o1);
            int q = sc.nextInt();
            int[] qurey = new int[q];
            for (int i = 0; i < q; i++) {
                qurey[i] = sc.nextInt();
            }
            for (int i = 0; i < qurey.length; i++) {
                for (int j = 0; j < sorted.length; j++) {
                    if (score[qurey[i]-1] == sorted[j]) {
                        double f = ((double) (num - j-1) / (double) num) * 100;
                        BigDecimal bigDecimal = new BigDecimal(f);
                        System.out.println(bigDecimal.setScale(6,BigDecimal.ROUND_HALF_UP));
                        break;
                    }
                }
            }
        }
    }
}

第二道题,我看错题目了,直接对输入的顺序进行判断,所以只过了20,不过我的判断思路是申请n+2的数组长度,第一个位置放最后一个位置元素,最后一个位置放第一个位置元素,接着从i=1遍历到n-1,判断arr[j - 1] + arr[j + 1] <= arr[j]是否存在,如果存在,直接break,输出NO,但是问题就是在,可能这里,我看到别人比我多了一个sort,还有将数据类型改成了long,过了70,所以我想知道这道题最终应该怎么AC,难道必须进行输入数组的全排吗,这个复杂度太高了,求大佬指点

import java.util.Arrays;
import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while ( sc.hasNextInt() ) {
            int line = sc.nextInt();
            while ( line > 0 ) {
                int num = sc.nextInt();
                int[] arr = new int[num + 2];
                int len = arr.length;
                for (int i = 1; i < len - 1; i++) {
                    arr[i] = sc.nextInt();
                }
                Arrays.sort(arr);
                arr[0] = arr[len - 2];
                arr[len - 1] = arr[1];
                for (int j = 1; j < len - 1; j++) {
                    if (arr[j - 1] + arr[j + 1] < arr[j]) {
                        System.out.println("NO");
                        return;
                    }
                }
                System.out.println("YES");
                line--;
            }
        }
    }
}
#网易##笔试题目##Java#
全部评论
第二题你把数据排好序,如果a[0]+a[n-2]>a[n-1]||a[n-2]+a[n-3]>a[n-1]就输出yes,反之则no。
点赞 回复 分享
发布于 2019-08-03 19:24

相关推荐

点赞 7 评论
分享
牛客网
牛客企业服务