在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

上面算法题:

我的解答:

 public static int findKthLargest(int[] nums, int k) {if (nums ==null) {return 0;}if (k <1) {return -1;}int len = nums.length;int temp;for (int i = 0; i < len; i++) {for (int j = i + 1; j < len; j++) {if (nums[i] < nums[j]) {temp = nums[j];nums[j] = nums[i];nums[i] = temp;}}if (i == k) {break;}}return nums[k -1];
}

基本思路

冒泡排序,可以得到最大值,那么第k 大,就是排序排到k次就结束,就可以了。

网上最快的解答:

    public static int findKthLargest(int[] nums, int k) {int left=0,right=nums.length-1;while(left<right){int pivot = partition(nums, left,right);if(pivot ==k-1) {return nums[pivot];} else if(pivot>k-1){right=pivot-1;} else {left=pivot+1;}}return nums[left];}
private static int partition(int[] nums,int left,int right) {//先获取三个数的中位数int pivot = median3(nums,left,right);//int pivot = nums[left];int start=left,end=right-1;while(start<end) {//从pivot左边找起,停在第一个比pivot小的地方,等待交换while(nums[++start]>pivot) {}//从pivot右边朝气,停在第一个比pivot大的地方,等待交换while(nums[--end]<pivot) {}if(start<end) {swap(nums,start,end);}}//此时,交换start与pivotswap(nums,start, right-1);return start;}private static int median3(int[] nums,int left, int right){int median=(left+right)/2;if(nums[left]<nums[median]) {swap(nums, left, median);}if(nums[left]<nums[right]) {swap(nums,left, right);}if(nums[median]<nums[right]) {swap(nums, median, right);}swap(nums, median, right-1);return nums[right-1];}private static void swap(int[] nums, int left, int right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;}

写的有些复杂,大概是这样的思路。
二分一下,然后把最大的放在左边,中间,右边最小。然后把中间的数字,放在最右边的前一个位置。
然后从左边开始,找到比中间位置大的数字,和比中间位置小的他们两个换下位置。最后,比中间位置下的数字,和中间位置换下。
总体结果下来,就是,可以得到第n 大的数字。
如果说这个数字刚好是你要的第k 大,那么就返回。如果比你要的小,那么右边减一,把左边的数字排序,得出第k 大。如果比你要的大,k > n ,那么右边的数组去做上述的模糊排序。然后取值。

分析

上面第二个算法,确实在命中你的要求的话,确实很快,但是不好理解。有些复杂,一些基础的程序员可能理解起来比较困难,
上面冒泡,理解起来简单,但是排序的次数,k 越大,次数越多。算法时间复杂度是O(n^2)

总结:
自己找一份工作,确实没有什么难的。但是找一份薪资报酬,条件高的公司,确实还需要继续努力。需要巩固的知识,还有很多。加油吧,不要止步不前。

算法-----数组------ 数组中的第K个最大元素相关推荐

  1. ⭐算法入门⭐《哈希表》中等05 —— LeetCode 215. 数组中的第K个最大元素

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   给定整数数组nums和 ...

  2. LeetCode——215,数组中的第K个最大元素(分治法)

    尹成老师带你学算法 /*** \* Created: liuhuichao* \* Date: 2020/1/27* \* Time: 11:32 上午* \* Description: 数组中的第K ...

  3. 力扣(LeetCode)215. 数组中的第K个最大元素(C语言)

    一.环境说明 本文是 LeetCode 215题 : 数组中的第K个最大元素,使用c语言实现. 快速选择.查找无序数组的利器! 测试环境:Visual Studio 2019. 二.代码展示 void ...

  4. 在数组中查找第k个最大元素_查找数组中每个元素的最近最大邻居

    在数组中查找第k个最大元素 Problem statement: 问题陈述: Given an array of elements, find the nearest (on the right) g ...

  5. 215.数组中的第K个最大元素/347. 前 K 个高频元素

    2020-05-25 1.题目描述 数组中的第K个最大元素 2.题解 1.使用冒泡排序 2.使用快速排序 3.优先队列(内部是用堆来实现的) 3.代码 class Solution { public: ...

  6. 数组中的第K个最大元素

    数组中的第K个最大元素 在未排序的数组中找到第k个最大的元素.请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素. 示例 输入: [3,2,1,5,6,4] 和 k = 2 输出 ...

  7. 【LeetCode】【HOT】215. 数组中的第K个最大元素(优先队列)

    [LeetCode][HOT]215. 数组中的第K个最大元素 文章目录 [LeetCode][HOT]215. 数组中的第K个最大元素 package hot;import java.util.Co ...

  8. 215. 数组中的第 K个最大元素

    215. 数组中的第 K个最大元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数 组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5 ...

  9. LC215. 数组中的第K个最大元素

    题目介绍 数组中的第K个最大元素 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素. 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 输入: [ ...

  10. (关于单链表的真题)已知一个带有表头结点的单链表...请设计一个尽可能高效的算法,查找链表中倒数第k个位置的结点。

    真题描述 已知一个带有表头结点的单链表,结点结构为 data next 假设该链表只给出了头指针head.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点. 若查找成 ...

最新文章

  1. 整理了一下SQL Server里面可能经常会用到的日期格式转换方法
  2. Plotly绘制时间序列图实战:简单时序图、时间范围限制的时序图
  3. 常用数据库语句(更新)
  4. python程序调试题_关于python程序调试问题,一个文件计算的问题
  5. Imdb影评的数据集介绍与下载
  6. 第一周(7.11)作业——1、自我介绍;2、决心书
  7. ObReferenceObjectByName vs IoGetDeviceObjectPointer
  8. Android适配64位TBS X5内核
  9. 手把手·教你用 Echarts 画 ChinaMap
  10. linux启动和grub修复
  11. 福禄克FLUKE OFP2-100-Q CH与OFP2-Q-ADD技术规格
  12. 如何找到计算机上的画图拦,电脑中自带的Window画图工具不见了怎么恢复
  13. MIUI9线刷包精简
  14. Windows添加系统桌面常用图标
  15. linux中目录权限777,Linux文件和目录的777、755、644权限解释
  16. 服务器inetpub是什么文件夹,inetpub是什么文件夹?Win10怎么删除c盘下的inetpub文件夹?...
  17. 伊利诺伊香槟分校计算机科学,UIUC的CS「伊利诺伊大学香槟分校计算机科学系」...
  18. 英语常用缩写(Abbreviations) ---一般常用缩写
  19. 如何卸载Cygwin
  20. 使用MemoryStream类读写内存

热门文章

  1. 服务器智能监控软件,监控 监控系统 消防智能监控 智能监控软件
  2. C++知识点53——虚继承
  3. 阿里云平台注册与使用Linux
  4. python数据分析实况_机器学习竞赛分享:通用的团队竞技类的数据分析挖掘方法...
  5. 项目上线简化流程介绍
  6. Leetcode 1
  7. 荣耀9将要回归金属材质,网友直呼:看着就很贵
  8. 你的项目真的需要Session吗? redis保存session性能怎么样?
  9. POJ 3982 序列 塔尔苏斯问题解决
  10. spring配置异步执行