博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LintCode 5.第k大元素
阅读量:5264 次
发布时间:2019-06-14

本文共 2430 字,大约阅读时间需要 8 分钟。

import org.junit.Test;import java.util.*;public class KthLargestElement {
/** * @param k : description of k * @param nums : array of nums * @return: description of return * 思路来自:[https://www.cnblogs.com/dsj2016/p/5500204.html](https://www.cnblogs.com/dsj2016/p/5500204.html) */ private static final int DEFAULT_INITIAL_CAPACITY = 11; public int kthLargestElement(int k, int[] nums) { // write your code here //优先队列 int ret = 0; PriorityQueue
priorityQueue = new PriorityQueue<>(DEFAULT_INITIAL_CAPACITY, new Comparator
() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); for (int i = 0; i < nums.length; i++) { priorityQueue.add(nums[i]); }// System.out.println(Arrays.toString(priorityQueue.toArray()));// Iterator iterator = priorityQueue.iterator();// while (iterator.hasNext()) {
// System.out.println(iterator.next());// } System.out.println("----------------"); for (int i = 0; i < k; i++) { ret = priorityQueue.poll(); } return ret; } /** * 第二种方法是用快速排序的思想。快速排序每次把一个元素交换到正确的位置, * 同时把左边的都方上大的,右边都放上小的。这个算法每一次选取一个枢纽元, * 排序之后,查看枢纽元的位置。如果它的位置大于K,就说明,要求出前面一个 * 子序列的第K大的元素。反之,如果小于K,就说明要求出在后面一个序列的第 * K - 前一个序列的长度个元素 */ public int kthLargestElement2(int k, int i, int j, int[] nums) { if (i > j) { return 0; } int flag = nums[i]; int y = j; int x = i; int t = 0; while (y > x) { while (nums[y] <= flag && y > x) { y--; } while (nums[x] >= flag && y > x) { x++; } t = nums[y]; nums[y] = nums[x]; nums[x] = t; } nums[i] = nums[y]; nums[y] = flag; if (k-1 < y) { return kthLargestElement2(k, i, y - 1, nums); } else if (k-1 > y) { return kthLargestElement2(k, y + 1, j, nums); } else { return nums[k-1]; } } @Test public void testKthLargestElement() { int[] nums = {
6, 1, 2, 7, 9, 3, 4, 5, 10, 8}; int ret = kthLargestElement2(3,0,nums.length-1, nums); System.out.println(ret); }}

转载于:https://www.cnblogs.com/wei1/p/9582063.html

你可能感兴趣的文章
杂七杂八的小笔记本
查看>>
51Nod1353 树
查看>>
CF1215E Marbles
查看>>
.net Core 图片验证码 基于SkiaSharp实现
查看>>
fish redux 个人理解
查看>>
java 笔记一些
查看>>
BZOJ2339 HNOI2011卡农(动态规划+组合数学)
查看>>
BZOJ3811 玛里苟斯(线性基+概率期望)
查看>>
简单的异步函数async/await例子
查看>>
一个点击事件引发的案件
查看>>
Android.mk介绍
查看>>
【Demo】动态库创建示例
查看>>
The 2014 ACMICPC Asia Regional Xian Online
查看>>
oracle 触发器
查看>>
json 字符串转成对象
查看>>
中国省市地区数据库
查看>>
jQuery $.extend()用法总结
查看>>
octave基本操作
查看>>
排球计分程序重构(一)
查看>>
go 文件上传
查看>>