首页 > 其他分享 >【牛客刷题】HJ68 成绩排序

【牛客刷题】HJ68 成绩排序

时间:2023-02-15 23:24:09浏览次数:53  
标签:name int grade 牛客 grades score HJ68 public 刷题

题目链接

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

如果用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,真棒

标签:name,int,grade,牛客,grades,score,HJ68,public,刷题
From: https://www.cnblogs.com/wingsless/p/17125138.html

相关文章

  • 数据结构刷题2023.02.15小记
    各排序算法时间复杂度如何提高哈希表的查找效率Hash表的查找效率取决于散列函数、处理冲突的方法和装填因子。显然,冲突的产生概率与装填因子(表中记录数与表长之比)的大小......
  • 【牛客刷题】HJ15 求int型正整数在内存中存储时1的个数
    题目链接题倒是很简单,最开始用了这么一种解法:packagemainimport"fmt"funcmain(){ a:=0 fmt.Scan(&a) str:=fmt.Sprintf("%b",a) fmt.Printf("%d",co......
  • 牛客2023情人节比赛总结
    来水一篇...今天的比赛还是蛮简单的(虽然也没ak吧)主要有两个点要提醒一下自己,一个是组合公式\(k*C_n^{k}=n*C_{n-1}^{k-1}\),还有一个是一个并不难证明的结论:若\(\frac{a......
  • 牛客情人节 (悸动的距离)
      点击查看代码 inta,b,c,d; cin>>a>>b>>c>>d; intans=0; if(a>=0&&c<=0||c>=0&&a<=0)ans++;//x轴交点 if(b>=0&&d<=0||b>=0&&d<=0)ans++;//y轴交点 if......
  • 算法刷题-二叉树的锯齿形层序遍历、用栈实现队列_栈设计、买卖股票的最佳时机 IV
    二叉树的锯齿形层序遍历(树、广度优先搜索)给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二......
  • C++奥赛一本通刷题高精度题解
    title:C++奥赛一本通刷题记录(高精度)date:2017-11-15tags:一本通openjudegecategories:OIC++奥赛一本通刷题记录(高精度)2017.11.15Bygwj1139177410大整数加法​......
  • 记录牛客网分糖果问题
    我在学习java,因此编程都是用java来做题的在记录糖果数时,我想用逆向指针添加递减的糖果数,因此还需要判断逆向最高点是否需要取代正向最高点排行中第一位使用正向指针......
  • 【牛客刷题】HJ13 句子逆序
    题目链接题目本身不难,但是牛客的输入样例很坑,因此只好使用bufio来进行输入了:packagemainimport( "bufio" "fmt" "os" "strings")funcmain(){ input:=bu......
  • 【牛客刷题】HJ10 字符个数统计
    题目链接简单的说这题就是字符串去重以后检查长度。如果用Java的话,可以遍历字符串,然后利用Set来进行去重,最后统计Set的size就可以了。但是如果是Go语言,则稍微麻烦点。基......
  • SQL276 牛客的课程订单分析(六)
    题目描述有一个订单信息表(order_info),有一个客户端表(client),请你写出一个sql语句查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课......