题目链接

这题本身就是一个排序题,按照学生成绩排序,成绩一样的按照输入的前后顺序排。

如果用Java,那么利用ArrayList能很轻松的完成:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner; public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int a = in.nextInt();
int b = in.nextInt(); // 0 or 1
List<Student> list = new ArrayList<>();
for (int i = 0; i < a; i++) {
Student student = new Student(in.next(), in.nextInt());
list.add(student);
} if (b == 1) {
list.sort(Comparator.comparingInt(Student::getGrade));
}
if (b == 0) {
list.sort((o1, o2) -> o2.getGrade() - o1.getGrade());
} list.forEach(System.out::println);
}
}
} class Student {
private String name; private int grade; public Student(String name, int grade) {
this.name = name;
this.grade = grade;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getGrade() {
return grade;
} public void setGrade(int grade) {
this.grade = grade;
} @Override
public String toString() {
return this.name + " " + this.grade;
}
}

但是实际执行时间不容乐观,要169ms。换成Go试试看,实际上也是定义一个数据结构,但是这里要注意一点,一定要加上index表示输入顺序,事实上Java帮我们做了好多事情,一旦换了别的语言要首先适应自己的事情自己做:

package main

import (
"fmt"
"sort"
) type Grade struct {
name string
score int
index int
} func main() {
num := 0
fmt.Scan(&num) flag := 0
fmt.Scan(&flag) var grades []*Grade for i := 0; i < num; i++ {
name := ""
score := 0
fmt.Scan(&name, &score)
grades = append(grades, &Grade{name, score, i})
} if flag == 0 {
sort.Slice(grades, func(i, j int) bool {
if grades[i].score == grades[j].score {
return grades[i].index < grades[j].index
}
return grades[i].score > grades[j].score
})
} else {
sort.Slice(grades, func(i, j int) bool {
if grades[i].score == grades[j].score {
return grades[i].index < grades[j].index
}
return grades[i].score < grades[j].score
})
}
for _, v := range grades {
fmt.Printf("%s %d\n", v.name, v.score)
}
}

实际执行时间6ms,真棒

【牛客刷题】HJ68 成绩排序的更多相关文章

  1. 句子反转——牛客刷题(java)

    题目描述: 给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格. 比如: (1) “hello xiao mi”-> “mi xia ...

  2. 输出单项链表中倒数第k个结点——牛客刷题

    题目描述: 输入一个单向链表,输出该链表中倒数第k个结点 输入.输出描述: 输入说明:1.链表结点个数 2.链表结点的值3.输入k的值 输出说明:第k个结点指针 题目分析: 假设链表长度为n,倒数第k ...

  3. 【牛客 错题集】Linux系统方面错题合集

    前言:牛客Linux322道全部刷完,有些题目较老,甚至考核5系统,现在7都出来了几年了 = = 还有些题目解析的很好部分也摘录了进来.很多涉及嵌入式开发的选择题同样的摘录的作为了解使用 ------ ...

  4. OJ题:成绩排序

    题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理. 例示: jack 70 peter 96 Tom 70 smit ...

  5. 刷题总结:排序机械臂(石室中学oj)(splay)

    题目: 题目描述 为了把工厂中高低不等的物品按从低到高排好序,工程师发明了一种排序机械臂.它遵循一个简单的排序规则,第一次操作找到最低的物品位置 P1,并把从左起第 1 个至第 P1 个之间的物品反序 ...

  6. OJ刷题---ASCII码排序

    题目要求: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluaGFpeXVuX3l0ZHg=/font/5a6L5L2T/fontsize/400/f ...

  7. LeetCode刷题--26.删除排序数组中的重复项(简单)

    题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成. 示例 ...

  8. C#LeetCode刷题之#34-在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4970 访问. 给定一个按照升序排列的整数数组 nums,和一个目 ...

  9. leetcode刷题-82.删除排序链表中的重复元素 II

    题目 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5输出: 1- ...

  10. leetcode刷题-83删除排序链表中的重复元素

    题目 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 实现 # Definition for singly-li ...

随机推荐

  1. Android程序获取鸿蒙手机设备信息(是否鸿蒙手机、版本号、小版本号等)

    1.效果图 鸿蒙手机 --> 关于手机的截图: Android程序获取鸿蒙手机设备信息的截图: 2.实现 本案例DEMO的实现主要借鉴了网上现有的资料: https://blog.csdn.ne ...

  2. Kubernetes(四)Pod详解

    Pod详解 本章主要介绍Pod资源的各种配置(yaml文件)和原理 1. Pod介绍 如上图所示,每个Pod中都可以包含一个或多个Container,这些Containers 可以分为2类: 用户程序 ...

  3. pyside6 QThread 以及自定义信号 测试

    import sys import random from time import sleep from PySide6 import QtCore as qc from PySide6 import ...

  4. ENVI无缝镶嵌、拼接栅格数据的方法

      本文介绍基于ENVI软件,利用"Seamless Mosaic"工具实现栅格遥感影像无缝镶嵌的操作.   在遥感图像镶嵌拼接:ENVI的Pixel Based Mosaicki ...

  5. HTML5、CSS3 里面都新增了那些新特性?

    HTML5 新的语义标签 article 独立的内容. aside 侧边栏. header 头部. nav 导航. section 文档中的节. footer 页脚. 画布(Canvas) API 地 ...

  6. Java List对象分组

    实体类 必须重写equals和hashCode方法 package com.zcsoft.rc.backend.biz.vo.securityLibary; import java.util.Date ...

  7. yb课堂 VueCli 4.3搭建yb课堂前端项目架构 《三十二》

    使用VueCli 4.3搭建yb课堂前端项目框架 创建yb课堂Vue项目 vue create ybclass_front 选择feature模式 安装vuex.vue-router,用vscode打 ...

  8. 首届 DIVE 精彩回顾丨践行企业数字化,基础软件如何创新

    "墙高基下,虽得必失."在构建数字企业大厦的工程中,基础软件的重要性不言而喻.但对于各行各业而言,面向传统经营模式设计的基础软件已经难以支撑数字业务的创新,唯有汲取专业团队的经验, ...

  9. WebGL加载本地模型

    前言 大部分的webgl框架,比如threejs和babylon等,都可以加载obj和gltf模型. 我们的引擎,基于three封装,同样有加载模型的loader,因此加载obj和gltf模型也是很简 ...

  10. Python 基于Python生成短8位唯一id解决方案

    基于Python生成短8位唯一id解决方案 by:授客 QQ:1033553122 测试环境: Win10 Python 3.5.4   实现思路 利用62个可打印字符,通过随机生成32位UUID,由 ...