华为机试-HJ68 成绩排序
作者:互联网
日常刷题记录,欢迎讨论交流。
目前暂时想到的一种偷懒解法,持续更新。
牛客网题目链接:https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b
描述
给定一些同学的信息(名字,成绩)序列,请你将他们的信息按照成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
jack 70
Tom 70peter 96 注:0代表从高到低,1代表从低到高 数据范围:人数:1≤n≤200 进阶:时间复杂度:O(nlogn) ,空间复杂度:O(n)
输入描述:
第一行输入要排序的人的个数n,第二行输入一个整数表示排序的方式,之后n行分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入:3 0 fang 90 yang 50 ning 70输出:
fang 90 ning 70 yang 50
示例2
输入:3 1 fang 90 yang 50 ning 70输出:
yang 50 ning 70 fang 90解法一:
1 import java.util.Scanner; 2 3 //解题思路:空间换时间,非最优,假设成绩最高100分,用字符串二维数组的行号表示分数,列按照顺序存储相同分数的不同记录 4 public class Main { 5 public static void main(String[] args) { 6 Scanner sc = new Scanner(System.in); 7 int num = Integer.parseInt(sc.nextLine()); 8 // System.out.println(num); 9 int order = Integer.parseInt(sc.nextLine()); 10 // System.out.println(order); 11 //创建字符串二维数组 12 String[][] arr = new String[101][num]; //字符数组默认为空,列长度最大为num(即所有人成绩都相同的时候) 13 int minscore = 0; 14 int maxscore = 0; 15 while (sc.hasNext()) { 16 String str = sc.nextLine(); 17 // System.out.println(str); 18 String[] strarr = str.split(" "); 19 int score = Integer.parseInt(strarr[1]); 20 for (int i = 0; i < num; i++) { 21 if (null == arr[score][i]) { 22 arr[score][i] = str; 23 break; 24 } 25 } 26 minscore = Math.min(score, minscore); //记录最低分 27 maxscore = Math.max(score, maxscore); //记录最高分 28 } 29 //遍历数组输出内容 30 if (order == 1) { //升序 31 for (int j = minscore; j <= maxscore; j++) { 32 for (int k = 0; k < num; k++) { 33 if (null == arr[j][k]) { 34 break; 35 } else { 36 System.out.println(arr[j][k]); 37 } 38 } 39 } 40 } else if (order == 0) { //降序 41 for(int m = maxscore; m >= minscore; m--){ 42 for(int n = 0; n < num; n++){ 43 if(null == arr[m][n]){ 44 break; 45 }else{ 46 System.out.println(arr[m][n]); 47 } 48 } 49 } 50 } 51 52 } 53 }
持续更新中...
标签:int,minscore,50,华为,num,70,机试,成绩,HJ68 来源: https://www.cnblogs.com/hsw-CN/p/16476524.html