您的位置:首页 > 编程语言

网易2016实习研发工程师编程题——寻找第K大

2017-03-25 00:32 295 查看

1、题目

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

测试样例: [1,3,5,2,2],5,3

返回:2

2、基本思想

本文中不考虑优化算法,直接使用快排算法对数据先进行排序,然后返回排序好的第K大数据。有优化算法的给出方案。

2、解决方案

import java.util.*;

public class Finder {
public int findKth(int[] a, int n, int K) {
// write code here
return F_QuickSort(a,0,n-1)[n-K];
}
public static int[] F_QuickSort(int data[], int l, int r) {
if (l < r)
{
int i = l, j = r, x = data[l];
while (i < j)
{
while(i < j && data[j] >= x) // 从右向左找第一个小于x的数
j--;

//找到后,将这个数赋值给i的位置,并将i向后移动位置
if(i < j)
data[i++] = data[j];

while(i < j && data[i] < x) // 从左向右找第一个大于等于x的数
i++;

//找到后,将这个数赋值给j的位置,并将j向前移动1位
if(i < j)
data[j--] = data[i];
}
data[i] = x;
F_QuickSort(data, l, i - 1); // 递归调用
F_QuickSort(data, i + 1, r);
}
return data;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网易 算法