`
albrich
  • 浏览: 11121 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java求数组中第K大的数

阅读更多
这是我在面试中面试官问过我的一个问题,网上也有很多人说遇到过这样的问题,说实话这个题很操蛋也很经典,选对方法才是关键。

public static void main(String[] args)

{
      //求数组中第K大的数
      int [] n={1,23,12,12,12,58,24,44,32,56,56,56,67,23,44};
      repeat(n,5);
 
       //求集合中第K大的数
       List list = new ArrayList();
       list.add(0, 1);
       list.add(1, 23);
       list.add(2,12);
       list.add(3,58);
       list.add(4,24);                                                     
       list.add(5,44);
 
       int [] array = new int[list.size()];
       for(int i=0;i<list.size();i++)
       {
        array[i]=(Integer) list.get(i);
       }
       repeat(array,5);
}

//获取数组中第K大的数方法
private static void repeat(int [] a,int k)

{
       Arrays.sort(a);
       int count=0;
       for(int x =a.length-1;x>=0;x--)
       {
             if(a[x-1]!=a[x])
             {
                   count++;
                   if(count==k)
                   {
                         System.out.println("第"+k+"大的数是:"+a[x]);
                         break;
                   }
              }
       }
}

有兴趣的可以加群:203609918,我们一起进步!!!
1
0
分享到:
评论
6 楼 albrich 2012-03-07  
837062099 写道
算法复杂度太高了,应该用二分法。

二分法好像不能过滤掉重复的数据,比如int[] num={1,2,2,3},如果求第三大的数,它就会输出2,而不是3
5 楼 xlaohe1 2012-03-02  
public static void gMax(int index) {
		int [] n={1,23,12,12,12,58,24,44,32,56,56,56,67,23,44};
		Set<Integer> set = new TreeSet<Integer>(); // treeSet auto sort
		for(int i = 0; i < n.length; i ++) 
			set.add(n[i]);
		for(int i : set)
			System.out.print(i + " ");
		System.out.println();
		if(index == 0){ // not enter 0
			System.out.println("Enter error");
			return;
		}
		if(index - 1 < set.size()) // index begin 1
			System.out.println(set.toArray()[set.size() - index]);
		else
			System.out.println("Not found");
	}
4 楼 xfjt297857539 2012-03-02  
837062099 写道
算法复杂度太高了,应该用二分法。

二分法?大概代码能写一下吗?
3 楼 837062099 2012-03-02  
yuelangyc 写道
先把数组排序然后取第K个数可以么。


可以啊,不过算法不太好,先排序几乎是万能的方法。
2 楼 yuelangyc 2012-03-02  
先把数组排序然后取第K个数可以么。
1 楼 837062099 2012-03-02  
算法复杂度太高了,应该用二分法。

相关推荐

    java-leetcode题解之第215题数组中的第K个最大元素.zip

    在本压缩包中,我们关注的是Java编程语言与LeetCode平台上的第215题——“数组中的第K个最大元素”。LeetCode是一个在线的算法练习平台,它提供了丰富的编程题目来帮助程序员提升算法和数据结构技能。第215题是其中...

    17082 两个有序数序列中找第k小

    17082 两个有序数序列中找第k小(必做) 时间限制:1000MS 内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题 语言: C++;C;VC;JAVA Description 已知两个已经排好序(非减序)的序列X和Y,其中X的长度为m,Y长度为...

    Java实现将数组的子数组a[0:k]和a[k+1:n-1]进行换位的算法

    该方法接受一个整数数组`array`和一个整数`k`作为参数,表示要交换的子数组的边界。 ```java public class ArrayChangePosition { public static void swapSubarrays(int[] array, int k) { // 检查输入参数的...

    java求第k小问题

    在Java编程语言中,"求第k小问题"是一个经典的算法问题,常见于计算机科学的排序与搜索领域。这个问题的基本需求是,给定一个整数数组或列表,找到其中的第k个最小元素,这里的k通常是从1开始的自然数。这种问题在...

    java二维数组删除特定行代码

    本文将深入解析如何在Java中实现对二维数组的特定行进行删除的操作,特别是当某行满足特定条件(如该行末尾的数据个数小于等于1)时。 ### Java二维数组删除特定行 #### 1. 理解问题背景 在给定的代码片段中,...

    java数组矩阵乘法

    在Java编程语言中,数组矩阵乘法是一项基本但至关重要的操作,尤其对于处理数学问题、科学计算以及数据处理等场景。本教程将深入浅出地介绍如何在Java中实现两个矩阵的乘法,并帮助初学者更好地理解和应用Java进行...

    数组排序后拿出最大的几个数,并且取它们的下标,包括数组元素相同的情况

    在Java编程中,面对"数组排序后拿出最大的几个数,并且取它们的下标,包括数组元素相同的情况"这样的需求,我们需要使用特定的算法来处理。这个问题可以通过多种方法解决,这里我们将详细介绍一种常见且有效的方法:...

    java数组排序.docx

    快速排序的原理是先从数列中取出一个数作为基准数,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边,再对左右区间重复第二步,直到各区间只有一个数。其实现代码如下: public class pXDemo { ...

    二维数组排序

    在Java中,可以通过以下方式创建和初始化二维数组: ```java private static final int COL = 3; // 定义列数 private static final int ROW = 256; // 定义行数 private static final int[][] s = new int[ROW]...

    java实现数组中的逆序对

    Java实现数组中的逆序对 Java实现数组中的逆序对是指在数组中,两个数字的顺序与其在数组中的出现顺序相反的对数,即如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。例如,在数组{7,5,6,4}中,...

    java-leetcode面试题解双指针之第713题乘积小于k的子数组.zip

    本题“乘积小于k的子数组”是LeetCode中的第713题,它考察了我们对双指针的理解以及如何有效地处理数组中的乘法运算。 首先,我们需要理解题目要求。给定一个整数数组`nums`和一个整数`k`,我们需要找出并返回数组...

    java面试题之数组中的逆序对

    "Java面试题之数组中的逆序对详解" Java是一种流行的编程语言,在面试中经常会出现数组中的逆序对问题。今天我们来详细介绍一下这个问题的解决方案。 什么是数组中的逆序对? 在数组中,如果前一个数字大于后一个...

    【IT十八掌徐培成】Java基础第03天-06.二维数组-三维数组-循环遍历.zip

    本课程由IT十八掌徐培成老师讲解,重点围绕Java中的二维数组、三维数组以及如何使用循环遍历这些数组展开。 一、二维数组 二维数组可以视为一个表格,它包含了一组行和列,每个元素都有特定的行索引和列索引。在...

    Java数组与字符串.docx

    在Java编程语言中,数组和字符串是两种基本的数据结构,它们在编程中有着广泛的应用。本实验旨在让学生熟悉这两种数据类型的使用,通过编写和运行实际的Java代码来加深理解。 一、数组 数组是一种可以存储同一类型...

    Java实现多个数组间的排列组合

    Java实现多个数组间的排列组合是Java编程中的一种常见需求。例如,在手机销售中,手机有不同的颜色、尺寸和版本,这些属性之间存在排列组合关系,需要使用Java语言实现这些排列组合。 在Java中,实现多个数组间的...

    JAVA中寻找最大的K个数解法

    在Java编程中,寻找最大的K个数是一个常见的算法问题,主要出现在面试和数据结构与算法的练习中。这个问题要求从一个整数数组中找到最大的K个元素,而不仅仅是最大值。传统的解法通常包括排序整个数组,然后取前K个...

    二维数组如何进行冒泡排序

    - 使用双层循环,从二维数组的每一个元素出发,将元素逐个添加到一维数组中。 - 示例代码片段: ```c int b[6]; // 定义一维数组 int k = 0; // 初始化计数器 for (int i = 0; i ; i++) { for (int j = 0; j ...

    POJ2092:计数排序,求第K大的元素

    【标题】"POJ2092:计数排序,求第K大的元素"是一个编程题目,主要涉及计数排序算法以及如何在数组中找出第K大的元素。计数排序是一种非基于比较的排序算法,它适用于整数排序,尤其在数据范围不大的情况下效率极高。...

Global site tag (gtag.js) - Google Analytics