其他分享
首页 > 其他分享> > 华为机试-HJ68 成绩排序

华为机试-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       70
peter     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