第k个元素

ops/2024/12/15 2:48:18/

题目

以尽量高的效率求出一个乱序数组中按数值顺序的第k个元素值

解法1

以arr={10,9,8,7,6,5,4,3,2,1},k=4的情况举例:
先选择一个候选中值6,比它小的放在它的左边,比它大的放在它的右边,那么该候选中值的排名可以知道是6。那么第4个元素在左边。

在这里插入图片描述
再在左边选一个候选中值2,,比它小的放在它的左边,比它大的放在它的右边,arr={1,2,5,3,4,6,10,7,8,9}。候选中值的排名是2,那么第4个元素在它的右边。

java">package com.company;import com.company.util.ArrayUtil;import java.util.Arrays;public class Test21 {/*第k个元素的左边k-1个元素都比它小,右边的元素都比它大*/public static void main(String[] args) {int k=4;
//        int[] arr={4, 6, 7, 0, 6, 4, 1, 0, 0, 10};int[] arr = ArrayUtil.randomArray(0, 11, 10);System.out.println(Arrays.toString(arr));System.out.println(find(arr, 0, arr.length - 1, k));Arrays.sort(arr);System.out.println(Arrays.toString(arr));}public static int find(int[] arr,int left,int right,int k){/*if (left>right){return -1;}*/int mid=(left+right)/2;//排序arr[left] arr[mid] arr[right]可能右重复int maxIndex=left;int minIndex=left;if(arr[mid]<arr[minIndex]){minIndex=mid;}if(arr[right]<arr[minIndex]){minIndex=right;}if(arr[mid]>arr[maxIndex]){maxIndex=mid;}if(arr[right]>arr[maxIndex]){maxIndex=right;}int midIndex=(left+right+mid)-(maxIndex+minIndex);System.out.println(midIndex);ArrayUtil.swap(arr,midIndex,left);System.out.println(Arrays.toString(arr));int j=right;int i=0;for ( i = left+1; i <j ; i++) {if(arr[i]>arr[left]){while(j>i){if(arr[j]<=arr[left]){ArrayUtil.swap(arr,i,j);break;}j--;}}}ArrayUtil.swap(arr,left,i-1);System.out.println(Arrays.toString(arr));if(arr[j]<=arr[left]){ArrayUtil.swap(arr,left,j);}if(i==k){return arr[i-1];}else if(i<k){return find(arr,i,right,k);}else{return find(arr,left,i-2,k);}}
}

解法2

先排序,再找出第k个元素。代码略。


http://www.ppmy.cn/ops/141984.html

相关文章

Xerces-C,一个成熟的 C++ XML 解析库!

嗨&#xff0c;大家好&#xff01;我是一行。今天咱们来探索 Xerces-C&#xff0c;它可是 C里超棒的 XML 解析库哦&#xff01;能帮咱轻松处理 XML 数据&#xff0c;在很多数据交互、配置文件读取场景都超实用&#xff0c;快来一起学习使用它的妙招吧。 一、Xerces-C 是什么&am…

游戏引擎学习第39天

开场和欢迎 首先&#xff0c;我们的游戏是从零开始编写的&#xff0c;没有使用任何第三方库或引擎&#xff0c;因此我们从最基础的低层次编码做起。这种方式不仅适合那些对编程有兴趣的开发者&#xff0c;还对教育有很大帮助&#xff0c;因为许多开发者在学习过程中没有机会深…

使用webrtc-streamer查看实时监控

摄像头配置&#xff08;海康摄像头为例&#xff09; 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行&#xff0c;端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…

详解 ES6 Reflect

一. 概念 Reflect 是 ES6 中新增的一个内置对象&#xff0c;它提供了一组静态方法&#xff0c;用于操作对象。这些方法与 Object 上的方法具有相同的功能。在这些方法中会调用对应 Object 上的方法&#xff0c;并且返回对应结果。Reflect 的出现主要是为了将一些 Object 对象上…

【人工智能】用Python构建高效的自动化数据标注工具:从理论到实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门&#xff01; 数据标注是构建高质量机器学习模型的关键环节&#xff0c;但其耗时耗力常成为制约因素。本篇文章将介绍如何用Python构建一个自动化数据标注工具&#xff0c;结合机器学习和NLP技术&#xff0c;…

MySQL:表的内置函数

目录 一. 日期函数 二. 字符串函数 三. 数学函数​编辑 四. 其他函数 博客开始为各位读者介绍一个投递简历的平台&#xff1a;万码优才 专属于程序员的投递平台&#xff0c;大家快去试试吧&#xff01;&#xff01;&#xff01; 此篇博客讲解MySQL中关于表的内置函数。…

TDengine 数据结构

一、时序数据库结构 TDengine采用了时序数据库的结构&#xff0c;将数据按照时间顺序进行存储和管理。这种结构能够有效地提高数据的写入和查询效率&#xff0c;特别适用于大规模的时间序列数据存储和分析。 二、数据模型 在TDengine中&#xff0c;数据模型主要包括超级表&a…

使用ECK 快速部署 Elasticsearch 集群 + Kibana

部署 ECK [2.12] 安装说明 ElasticCloudonKubernetes(ECK)是一个 Elasticsearch Operator&#xff0c;但远不止于此。ECK 使用 Kubernetes Operator 模式构建而成&#xff0c;需要安装在您的 Kubernetes 集群内&#xff1b; 借助 Elastic Cloud on Kubernetes (ECK)&#xff0…