字符串算法——查找数组第K个最大值( Kth Largest Element in an Array)
2017-10-14 09:47
489 查看
问题:
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.
思路一:最简单粗暴就是对数组进行排序,然后就可以找到第K大的值,例如采用快速排序
思路二:直接采用优先队列的方法,优先队列默认建立小顶堆
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.
思路一:最简单粗暴就是对数组进行排序,然后就可以找到第K大的值,例如采用快速排序
class Solution { public int findKthLargest(int[] nums, int k) { //快速排序 int len = nums.length; dfs(nums,0,len-1); return nums[len-k]; } public void dfs(int []nums,int start,int end){ if(start<end){ int i = start; int j = end; int key = nums[start]; while(i<j){ while(j>i && nums[j]>key)j--; if(i<j){ swap(nums,i,j); } while(i<j && nums[++i]<key); if(i<j){ swap(nums,i,j); } } dfs(nums,start,i-1); dfs(nums,j+1,end); } } public void swap(int[]nums,int i,int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }
思路二:直接采用优先队列的方法,优先队列默认建立小顶堆
class Solution { public int findKthLargest(int[] nums, int k) { PriorityQueue<Integer> queue = new PriorityQueue<>();//创建优先队列 for(int i = 0;i<nums.length;i++){ queue.offer(nums[i]);//入队操作 if(queue.size()>k)queue.poll();//判断队列长度是否大于K } return queue.poll();//返回第K个最大值 } }
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【215-Kth Largest Element in an Array(数组中第K大的数)】
- [LeetCode] Kth Largest Element in an Array 数组中第k大的数字
- 数组-Kth Largest Element in an Array(找出第K大的数)
- LeetCode OJ 之 Kth Largest Element in an Array(数组中的第k大元素)
- LeetCode.215 Kth Largest Element in an Array 找出k个最大的(*****经典必备题*****)
- 算法训练: Kth Largest Element in an Array
- leetcode:Kth Largest Element in an Array 使用快速选择算法,以及对其复杂度的分析
- Kth Largest Element in an Array 数组中的第K大的数
- [LeetCode] Kth Largest Element in an Array (找出数组的第k大的元素)
- Kth Largest Element in an Array(数组中第K大元素)
- LeetCode算法问题14 —— Kth Largest Element in an Array
- Leetcode算法学习日志-215 Kth Largest Element in an Array
- Leetcode 215 Kth Largest Element in an Array 数组中第k大的元素
- 215. Kth Largest Element in an Array(数组中第k大的数字)
- 【Top K 问题】[Leetcode-215] Kth Largest Element in an Array 数组中第K大的数
- 【算法】【Divide and conquer】Kth Largest Element in an Array
- 算法设计课作业系列2——Kth Largest Element in an Array
- [leetcode-215]Kth Largest Element in an Array(java)
- 字符串算法——查找有序数组旋转后最小值(有重复元素)(Find Minimum in Rotated Sorted Array II)
- Kth Largest Element in an Array -- LeetCode