网易软开笔试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#
查看7道真题和解析