网易软开笔试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#