AcWing算法基础课-786第k个数-Java题解

news2024/9/20 8:10:47

heweilai-bolg-title-image-of-the-article

大家好,我是何未来,本篇文章给大家讲解《AcWing算法基础课》786 题——第 k 个数。本篇文章详细解析了如何使用 Java 实现快速排序算法,以解决查找数组中第 k 个元素的问题。通过深入浅出的讲解,展示了从输入读取到快速排序实现的完整流程,帮助读者理解并掌握这一经典算法的核心思想和应用技巧。

文章目录

  • ❓题目描述
  • 💡算法思路
  • ✅Java代码
  • 🔗参考

❓题目描述

给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数。

输入格式

第一行包含两个整数 n 和 k。

第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整数数列。

输出格式

输出一个整数,表示数列的第 k 小数。

数据范围

1≤n≤100000,
1≤k≤n

输入样例:

5 3
2 4 1 5 3

输出样例:

3

💡算法思路

  1. 对数列进行快速排序
  2. 找出排序后数列中的第 k 个数

具体实现步骤:

  • 调用QuickSort方法对数组nums进行快速排序。
  • 快速排序的核心思想是选择一个基准值,将数组分为两部分,一部分小于基准值,一部分大于基准值,然后递归地对这两部分进行排序。
  • QuickSort方法中,首先选择一个基准值(这里选择的是中间位置的值),然后使用两个指针ij从数组的两端向中间移动,分别找到第一个大于基准值和小于基准值的元素,并交换它们的位置,以此来分区。
  • 递归地对基准值左右两部分进行快速排序,直到整个数组有序。
  • 排序完成后,直接输出数组中第 k-1 位置的元素,即第 k 个数。

✅Java代码

package basic.sort;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

public class Aw786 {

	// 创建一个StreamTokenizer对象,用于读取输入流
	public static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

	// 读取下一个整数的方法
	public static int nextInt() throws IOException {
		in.nextToken();
		return (int) in.nval;
	}

	public static int n; // 数组的大小
	public static int k; // 需要找到的第k个数
	public static int[] nums; // 存储输入的数组

	public static void main(String[] args) throws IOException {
		// 读取数组的大小和需要找到的第k个数
		n = nextInt();
		k = nextInt();
		// 初始化数组
		nums = new int[n];
		// 读取数组的元素
		for (int i = 0; i < n; i++) {
			nums[i] = nextInt();
		}
		// 对数组进行快速排序
		QuickSort(nums, 0, n - 1);
		// 输出第k个数,数列中的第k个数对应数组下标为k-1
		System.out.println(nums[k - 1]);
	}

	// 快速排序算法
	public static void QuickSort(int[] a, int l, int r) {
		// 如果左边界大于或等于右边界,则直接返回
		if (l >= r) {
			return;
		}
		// 初始化左右指针和基准值
		int i = l - 1, j = r + 1, x = a[l + r >> 1];
		// 进行分区操作
		while (i < j) {
			do {
				i++;
			} while (a[i] < x); // 找到左边大于等于基准值的元素
			do {
				j--;
			} while (a[j] > x); // 找到右边小于等于基准值的元素
			if (i < j) {
				// 交换这两个元素
				int temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
		// 递归地对左右两个分区进行快速排序
		QuickSort(a, l, j);
		QuickSort(a, j + 1, r);
	}

}

🔗参考

  • https://www.acwing.com/problem/content/description/788/
  • https://blog.csdn.net/coder_heweilai/article/details/141720984

作者:程序员何未来-heweilai.com


🔍推荐阅读

  1. AcWing算法基础课-785快速排序-Java题解
  2. 【七夕节实践】把爱心代码放在自己的网站上是什么体验?
  3. 塑造你的技术名片:写给程序员的个人品牌建设指南

欢迎关注我的博客:@程序员何未来,持续为你输出有价值的技术文章~
你们的点赞👍 收藏⭐ 留言🗨️ 关注✅
是我持续创作,输出优质内容的最大动力!谢谢!

文章关键词:算法,计算机算法,算法题解,算法竞赛,Java,数据结构,AcWing算法基础课

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

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

相关文章

Java程序打jar包(包含作者各种踩坑案例,力求为大家避雷)

一、诉求 将一个spring boot项目打包成一个jar包&#xff0c;直接在windows或者linux系统下直接命令行运行。 二、配置步骤 1、编写assembly.xml配置文件&#xff08;放在pom.xml同级目录&#xff09; <?xml version"1.0"?> <assembly><id>T…

GAN生成器好坏之评价方法

我们产生出来的生成器它好或者是不好。要 评估一个生成器的好坏&#xff0c;最直觉的做法也许是找人来看生成器产生出来的图片到底像不像真 实的图片。所以其实很长一段时间&#xff0c;尤其是人们刚开始研究生成式技术的时候&#xff0c;很长一段时间 没有好的评估方法。那时候…

群晖NAS安装(一)

主要教程参考 https://zhuanlan.zhihu.com/p/515187738?utm_id0&wd&eqide69f50bb0000263900000006645b5680 系统是DS3617xs DSM6.1.3 一 准备工作 旧16G U盘一个 软件: diskgenius 分区工具 win32diskimager 写入工具 chipeasy或者chipgenius 识别工具 二 安装 分区…

log4j2 与 log4j使用时的几点小区别 - log4j2上手说明

虽然log4j2 目前还是beta版&#xff0c;不过OneCoder已经忍不住要尝试一下。跟使用log4j 比起来&#xff0c;上手上主要的区别有。 1、依赖的jar包。使用slf4jlog4j2 时&#xff0c;依赖的jar包如下&#xff1a;( gradle配置&#xff0c;Maven对照修改即可) dependencies{ com…

SAP与湃睿PLM系统集成案例

一、项目背景 浙江某家用电机有限公司, 该公司的产品涵盖洗衣机、‌空调、‌冰箱及厨房用具等家电电机的制造&#xff0c;‌具备年产4600万台电机的生产能力&#xff0c;‌是中国最大的家电电机生产基地之一。 为确保工艺路线信息在设计与生产执行层面的无缝传递&#xff0…

python多进程

文章目录 1、前言2、示例3、参考 1、前言 python中使用多进程&#xff0c;可以加快代码的运行速度&#xff0c;更高效地进行相关工作。 2、示例 使用蒙特卡洛方法计算 π \pi π来进行使用多进程前后代码运行速率的对比&#xff1b; import random import multiprocessing as…

信也科技基于 Apache SeaTunnel金融场景的应用实践探索

前言 作者&#xff1a;朱俊&#xff0c;信也科技&#xff0c;数据开发专家 离线开发一直是数据仓库建设中重要的一个环节。信也科技之前基于Azkaban构建了离线任务调度与开发平台&#xff0c;承载了公司90%以上的离线任务调度需求&#xff0c;以及玄策变量平台的每日变量跑批产…

爵士编曲:如何编写爵士鼓

音源选取 使用ssd鼓写爵士乐&#xff0c;使用其中的豪华爵士音源&#xff0c;然后选其中的第一个或第二个都可以。 或者用add鼓studio drummer中的爵士鼓也可以 ​Cubase图示 用swing的律动把叮叮镲写上 然后第三拍加上踩镲

【截图服务 +打包】pkg打包 puppeteer

目录 最后结论 遇到的问题与解决 版本匹配问题 参考文档 最后结论 pkg -t win --public ./screenshots.js --output ./dist/screen.exe 服务启动&#xff1a; postman调用 &#xff1a; 遇到的问题与解决 版本匹配问题 pkg 这里说的是v3.5,实际装的是5.8.1&#xff0c;…

【ArcGIS Pro实操第二期】最小成本路径(Least-cost path)原理及实操案例

ArcGIS Pro实操第一期&#xff1a;最小成本路径原理及实操案例 概述&#xff08;Creating the least-cost path&#xff09;1.1 原理介绍1.2 实现步骤1.3 应用案例 2 GIS实操2.1 工具箱简介2.1.1 成本路径&#xff08;Cost path&#xff09;2.1.2 成本距离&#xff08;Cost dis…

Cesium 展示——格式化时间控件信息

文章目录 需求分析需求 如图,我们在 Cesium 初始化后如图一展示,展示的是UTC的时间,而且是英文,如何将该控件进行格式化一下,展示当前的北京时间呢?分析 初始化 Cesiumconst fetchData = () => {

【LabVIEW学习篇 - 20】:人机界面交互设计04

文章目录 声音播放自定义控件自定义控件创建过程演示 选项卡、子面板、分隔栏 声音播放 有时系统检测到某些事件发生时&#xff0c;需要通过声音去传递信息&#xff0c;因此播放声音也是一种重要的交互方式&#xff0c;如系统检测到异常报警时&#xff0c;需要放报警声音来通知…

flutter Image

Flutter中&#xff0c;Image是一个用于显示图片的控件&#xff0c;可以显示网络图片、本地图片以及Asset中的图片。Image控件支持多种常见的图片格式&#xff0c;例如PNG、JPEG、GIF等。 const Image({super.key,required this.image,this.frameBuilder,this.loadingBuilder,th…

用“黑科技”书写“黑神话” | 基于RK3576核心板的三维扫描仪应用方案

《黑神话&#xff1a;悟空》作为国内首款3A游戏大作&#xff0c;上线仅10天全球发行量就已超过1700万份&#xff0c;不论您是否是游戏玩家&#xff0c;相信您都能在各种新闻、宣传和活动中感受到这款游戏的热度。在游戏的众多亮点中&#xff0c;“细腻的场景设计与对名胜古迹的…

3个永不过时的妙招,恢复苹果手机视频不是问题

苹果手机的视频功能较为出色&#xff0c;使用苹果手机拍摄的视频更加真实、清晰&#xff0c;因此许多人会选择使用苹果手机来记录生活点滴。但是&#xff0c;如果我们不小心删除了苹果手机视频&#xff0c;有什么方法可以让这些“生活的回忆”重现呢&#xff1f;别担心&#xf…

拆解一个不靠烧广告的宠物站的流水成长流史丨出海笔记

最近后台收到会员的私信&#xff0c;说宠物投放广告ROI很低。秉承互助分享精神&#xff0c;我们也加入寻找突破口&#xff0c;看看别人的宠物网站是怎么做的。 之前出海笔记分享过 找竞对不能只找头部卖家&#xff0c;所以我们这次选取的是一个接地气的宠物网站alldogboots进行…

torchvision数据集使用

文章目录 一、下载torchvision中的数据集文件二、断点知识点三、数据集形式建立四、展示数据集中的图片 一、下载torchvision中的数据集文件 这段代码是使用PyTorch的torchvision库来加载CIFAR-10数据集。 import torchvision train_set torchvision.datasets.CIFAR10(root&…

EasyExcel 文件导出:表头与内容样式简单设置

文章目录 EasyExcel 文件导出 - 最终效果使用的 EasyExcel的版本设置表头样式和内容样式设置自动列宽 EasyExcel 文件导出 - 最终效果 具体的效果可通过修改代码来自行调整。经过调整后的样式与默认样式相比&#xff0c;美观程度大幅提升。 下面是默认的样式。丑的一批。 使用…

FreeRTOS学习笔记(一)初认RTOS

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、RTOS的引入二、Free RTOS的基本内容2.1 FreeRTOS的特点2.2 Free RTOS编程风格2.3 Free RTOS的配置文件 前言 笔者在去年曾经开始过rtos的学习&#xff08;虽…

模型中间部分的卷积可视化

整体代码如下&#xff1a; def forward(self, x):x self.conv1(x)x1 xout_img3 x1.squeeze()print(out_img3.shape)print("经过第一个卷积之后的输出&#xff1a;",x.shape) import yaml from omegaconf import OmegaConf from pathlib import Path from PIL imp…