数组中的第K个最大元素
1.介绍
在未排序的数组中找到第 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 ≤ 数组的长度。
2.解决思想
2.1先查出最小数的位置(优化是:如果数组长度等于k,直接返回最小值)
2.2采用了冒泡排序的思想,每次查出最大的数字,并将其数字放在最后面,每排序一次,下次排序的时候的数组长度减去1(如果交换位置的数字是最小值,调整最小值位置的值)
优化1:如果数组长度等于k,直接返回最小值
优化2:最开始是没有采用冒泡排序的,只是用一个map记录下了值,然后找下一个最大值的时候排除掉。采用目前的方法,每次遍历数组的长度都更小,效率更高
3.代码
public static int findKthLargest(int[] nums, int k) { int mix = 0; for (int n=0;n<nums.length;n++){ if(nums[n]<=nums[mix])mix=n; } if(k==nums.length)return nums[mix]; for (int i=0;i<k;i++){ int max = mix; for (int j=0;j<nums.length-i;j++){ if(nums[j]>=nums[max])max=j; } if(i==k-1)return nums[max]; if(nums.length-i-1==mix)mix = max; int maxValue = nums[max]; nums[max] = nums[nums.length-i-1]; nums[nums.length-i-1]=maxValue; } return 0; }
------------------------------------------------------------------------------------------------------------------------------------------------- 觉得我的博客有用的,请顶下我的文章并关注我,让更多的人能看到我写的博客,谢谢。-------------------------------------------------------------------------------------------------------------------------------------------------
网上的答案很多,但是怎么说呢,太多都是那种复制粘贴的答案,有些都是运行不了的。我写博客的原因主要是为了分享我的学习过程,帮助大家,同时也让其他人检查我的答案。太过简单的博客我就不写了,浪费彼此时间。
首先我保证,我的代码都是自己运行过的,如果是同样的java1.7是不会有问题。
其次,我的代码都是写清楚了解决思想的,便于大家理解。
我写代码主要是看中可读性,太过复杂的代码,在我看来是很扯淡的。代码的可读性很重要,尤其是在项目中,一个项目的代码如果需要他人阅读半天才能理解,那么这个项目会越来越难处理。