【java|golang】多字段排序以及排序规则

news2024/11/14 20:56:18
  1. 奖励最顶尖的 K 名学生

给你两个字符串数组 positive_feedback 和 negative_feedback ,分别包含表示正面的和负面的词汇。不会 有单词同时是正面的和负面的。

一开始,每位学生分数为 0 。每个正面的单词会给学生的分数 加 3 分,每个负面的词会给学生的分数 减 1 分。

给你 n 个学生的评语,用一个下标从 0 开始的字符串数组 report 和一个下标从 0 开始的整数数组 student_id 表示,其中 student_id[i] 表示这名学生的 ID ,这名学生的评语是 report[i] 。每名学生的 ID 互不相同。

给你一个整数 k ,请你返回按照得分 从高到低 最顶尖的 k 名学生。如果有多名学生分数相同,ID 越小排名越前。

示例 1:

输入:positive_feedback = [“smart”,“brilliant”,“studious”], negative_feedback = [“not”], report = [“this student is studious”,“the student is smart”], student_id = [1,2], k = 2
输出:[1,2]
解释:
两名学生都有 1 个正面词汇,都得到 3 分,学生 1 的 ID 更小所以排名更前。
示例 2:

输入:positive_feedback = [“smart”,“brilliant”,“studious”], negative_feedback = [“not”], report = [“this student is not studious”,“the student is smart”], student_id = [1,2], k = 2
输出:[2,1]
解释:

  • ID 为 1 的学生有 1 个正面词汇和 1 个负面词汇,所以得分为 3-1=2 分。
  • ID 为 2 的学生有 1 个正面词汇,得分为 3 分。
    学生 2 分数更高,所以返回 [2,1] 。

提示:

1 <= positive_feedback.length, negative_feedback.length <= 104
1 <= positive_feedback[i].length, negative_feedback[j].length <= 100
positive_feedback[i] 和 negative_feedback[j] 都只包含小写英文字母。
positive_feedback 和 negative_feedback 中不会有相同单词。
n == report.length == student_id.length
1 <= n <= 104
report[i] 只包含小写英文字母和空格 ’ ’ 。
report[i] 中连续单词之间有单个空格隔开。
1 <= report[i].length <= 100
1 <= student_id[i] <= 109
student_id[i] 的值 互不相同 。
1 <= k <= n

public List<Integer> topStudents(String[] positive_feedback, String[] negative_feedback, String[] report, int[] student_id, int k) {
        Map<Integer, Integer> map = new HashMap<>();
        Map<String, Integer> feedback = new HashMap<>();
        for (String s : positive_feedback) {
            feedback.put(s,3);
        }
        for (String s : negative_feedback) {
            feedback.put(s,-1);
        }
        for (int i = 0; i < report.length; i++) {
            String[] split = report[i].split(" ");
            int sum=0;
            for (String s : split) {
                sum+=feedback.getOrDefault(s,0);
            }
            map.put(student_id[i],sum);
        }
        Comparator<Map.Entry<Integer, Integer>> comparator = (o1, o2) -> {
            Integer o1Value = o1.getValue();
            Integer o2Value = o2.getValue();
            return o1Value==o2Value?o1.getKey()-o2.getKey():o2Value-o1Value;
        };
        List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list,comparator);
        List<Integer> res = new ArrayList<>();
        for (int i = 0; i < k; i++) {
            res.add(list.get(i).getKey());
        }
        return res;
    }

在这里插入图片描述

public List<Integer> topStudents(String[] positive_feedback, String[] negative_feedback, String[] report, int[] student_id, int k) {
        PriorityQueue<int[]> queue = new PriorityQueue<>((o1, o2) -> o1[1]==o2[1]?o1[0]-o2[0]:o2[1]-o1[1]);
        Map<String, Integer> feedback = new HashMap<>();
        for (String s : positive_feedback) {
            feedback.put(s,3);
        }
        for (String s : negative_feedback) {
            feedback.put(s,-1);
        }
        for (int i = 0; i < report.length; i++) {
            String[] split = report[i].split(" ");
            int sum=0;
            for (String s : split) {
                sum+=feedback.getOrDefault(s,0);
            }
            queue.add(new int[]{student_id[i], sum});
        }
        List<Integer> res = new ArrayList<>();
        for (int i = 0; i < k; i++) {
            res.add(queue.poll()[0]);
        }
        return res;
    }

在这里插入图片描述

func topStudents(positive_feedback []string, negative_feedback []string, report []string, student_id []int, k int) []int {
	ints := make([][2]int, 0)
	feedback:=make(map[string]int,0)
	for _, v := range positive_feedback {
		feedback[v]=3
	}
	for _, v := range negative_feedback {
		feedback[v]=-1
	}

	for i := 0; i < len(report); i++ {
		split:=strings.Split(report[i]," ")
		sum:=0
		for _, v := range split {
			sum+=feedback[v]
		}
		ints=append(ints, [2]int{student_id[i], sum})
	}
	sort.Slice(ints, func(i, j int) bool {
		if ints[i][1]==ints[j][1] {
			return ints[j][0]>ints[i][0]
		}
		return ints[i][1]>ints[j][1]
	})

	res := make([]int,0)
	for i := 0; i < k; i++ {
		res= append(res, ints[i][0])
	}
	return res
}

在这里插入图片描述

排序规则

语言排序规则升序降序
Java(o1,o2)o1-o2o2-o1
golang(i,j)i<ji>j

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

品牌低价的形式有哪些

线上产品五花八门&#xff0c;价格也有高低&#xff0c;但有时同一款商品&#xff0c;看似页面价一样&#xff0c;计算完促销信息后的到手价都会有所不同&#xff0c;有些店铺甚至会使用隐藏优惠券&#xff0c;如咨询客服领券、新人券等&#xff0c;而这些丰富的优惠方式&#…

华为OD机试 - 最大括号深度 - 栈stack(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

深入剖析 | 近期法院判决是不是司法部门有意平衡 SEC 监管天平

出品 &#xff5c;欧科云链研 究院 作者&#xff5c;Matthew Lee 9月27日&#xff0c;SEC 主席 Gary Gensler 参加了美国众议院金融服务委员会听证会。听证会审查 SEC 自 2021 年 10 月 5 日以来的一段时间内的监管发展、规则制定和活动&#xff0c;其中包括 SEC 提议修改“交易…

python图片:获得颜色占比,图片尺寸

꧂ 获得颜色占比&#xff0c;图片尺寸꧁ 要获取图片的尺寸、大小和颜色占比大于0.001的颜色值&#xff0c;可以基于上一个回答中使用Pillow库的代码进行修改。 from PIL import Image# 输入图片路径 image_path input("请输入图片路径: ")try:# 打开图片文件image …

零售超市商家怎么做微信小程序

随着互联网的发展&#xff0c;越来越多的零售超市商家开始关注如何借助微信小程序引流&#xff0c;以提高销售额和客户满意度。下面将介绍几个策略&#xff0c;帮助零售超市商家借助微信小程序实现引流。 首先&#xff0c;商家需要开发一款适合自己的微信小程序。小程序是一种轻…

win11右键菜单显示更多的设置方法

用了一年多win11系统了&#xff0c;Win11最大的变化之一莫过于右键菜单发生了变化。右键菜单很多时候需要点两次&#xff0c;实在是反人类&#xff0c;太麻烦了。 必须使用“显示更多选项”的右键菜单。 今天分享一个使用命令行更改右键菜单显示更多的设置方法&#xff1a; …

生鲜店怎么做微信小程序

在当今数字化时代&#xff0c;微信小程序已经成为了一种新的商业形态&#xff0c;为各类商家提供了丰富的获客和拉新手段。对于生鲜店来说&#xff0c;如何借助微信小程序来吸引新客户并提高销售额&#xff0c;成为了必须面对的重要问题。本文将为你提供一些实用的策略和建议&a…

【C/C++】 const

1、C语言的const 1、在C语言中 const修饰的局部变量保存在栈区 虽然不能通过const修饰的变量去修改栈区内容,但是可以 通过地址去修改 2、const修饰的全局变量是保存在常量区,不能通过变量名去修改.也不能通过地址去修改 3 、const修饰的全局变量,如果其他文件想使用,直接exte…

空间精密定位与导航VR模拟培训软件突破了时空限制

随着科技的飞速发展&#xff0c;测绘遥感技术逐渐成为地理信息获取的重要手段。然而&#xff0c;传统的测绘展示方式存在着诸多局限性&#xff0c;无法充分展现出测绘数据的精细化和多元化&#xff0c;成为为解决这一难题的有效途径。 测绘工程专业作为时下就业率爆棚的专业之一…

01、python基础知识:

1、注释 多行注释 单行注释 2、 数据类型 3、标识符 关键字 常用的标识符&#xff1a; 常用关键字&#xff1a; 4、输入输出 4.1 格式化输出: 格式化符号 占位符&#xff1b; 5、运算符、 数据类型转化&#xff1a; 1、字符串&#xff1a; 1.1、格式&#xff1a; 单引号、…

css实现排行榜样式(vue组件)

先看效果图&#xff1a; <template><div class"lawyer-refund-wrap"><div class"content"><divv-for"(item, index) in dataList" :key"index":style"{width: calc(100% - ${(index 1) * 10}px)}"c…

VGG卷积神经网络实现Cifar10图片分类-Pytorch实战

前言 当涉足深度学习&#xff0c;选择合适的框架是至关重要的一步。PyTorch作为三大主流框架之一&#xff0c;以其简单易用的特点&#xff0c;成为初学者们的首选。相比其他框架&#xff0c;PyTorch更像是一门易学的编程语言&#xff0c;让我们专注于实现项目的功能&#xff0…

计算机毕业设计选题推荐-springboot 教材管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Android项目打包aar(kts)

目录 app build.gradle.kts AndroidManifests 按步骤生成 生成结果 双击查看内容 app build.gradle.kts plugins {id("com.android.application")id("org.jetbrains.kotlin.android")id("kotlin-parcelize")id("kotlin-kapt") …

推荐开源工具带带弟弟ocr_ddddocr_各种验证码都可以识别_滑动_点击_等等---验证码识别工作笔记001

这个很强大了,常见的各种验证码都可以识别,如果你项目上也有需要,比如需要实现系统的自动登录,这个时候就很有用了,这里仅仅给出方案,具体如何用,用的时候在做研究吧,好东西要记录,分享给需要的人.使用的时候 自己去查一下如何使用非常简单. 支持点击的验证码,支持数字验证码就…

基于SSM的生活缴费系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

spring boot+ vue位置信息大数据综合管理平台源码

spring boot vue位置信息大数据综合管理平台源码 UWB技术的人员定位系统源码 智慧工厂是产业升级的外在表现形式&#xff0c;利用物联网技术加强信息管理的新模式&#xff0c;人员定位管理通过物联网技术、位置信息大数据的综合处理应用&#xff0c;在智慧工厂人员管理方面具有…

nexus部署私库及上传和拉包处理

部署不在此赘述&#xff0c;部署好后地址为&#xff1a;http://ip:8081/nexus 默认账号和密码&#xff1a;用户名:admin 密码:admin123 nexus里可以配置3种类型的仓库&#xff0c;分别是proxy、hosted、group proxy是远程仓库的代理。比如说在nexus中配置了一个central reposi…

c++视觉处理---霍夫变换

霍夫直线变换的函数 HoughLines 是OpenCV库中用于执行霍夫直线变换的函数。霍夫直线变换用于检测图像中的直线。下面是该函数的基本用法&#xff1a; cv::HoughLines(image, lines, rho, theta, threshold);image: 输入的二值图像&#xff0c;通常是通过边缘检测算法生成的。…

众佰诚:抖音开通橱窗的要求和流程有什么

在当下的社交媒体环境中&#xff0c;抖音作为一款短视频分享平台&#xff0c;已经吸引了大量的用户和商家。其中&#xff0c;抖音橱窗的功能使商家能够以一种更直接和吸引人的方式展示和销售他们的产品。下面&#xff0c;我们将详细介绍一下抖音橱窗的开通要求和流程。 开通要求…