赞
踩
在一个int数组中,寻找最大的k个数字,时间复杂度是O(n)。
思路:
第一步:
找到原数组最大值,利用比较计算
第二步:
新建数组,size是第一步中的最大值+1;
第三步:
循环原来数组,利用temp[a[i]]++,计算索引表示的数字在原数组出现次数
第四步:
倒序遍历新的数组,如果元素值不为0,打印下标,循环打印,直到数组值为0,并计算打印的元素个数count++,直到count等于k,完成输出
- package com.puhui.goosecard.web;
-
- /**
- * 2 * @Author: kerry
- * 3 * @Date: 2018/9/6 19:45
- * 4
- */
- public class Test {
-
-
- private static int searchMax(int[] temp) {
- int max = temp[0];
- for (int i = 0; i < temp.length; i++) {
- if (temp[i] > max) {
- max = temp[i];
- }
- }
- return max;
-
- }
-
-
- public static void main(String[] args) {
- int[] a = {1, 4, 12, 8, 6, 98, 3, 4, 1, 12};
- int max = searchMax(a);
- int k = 5;
- //max加1否则是0-97,数组越界98
- int[] temp = new int[max + 1];
- for (int i = 0; i < a.length; i++) {
- //可能有相同的数字
- temp[a[i]]++;
- }
- int count = 0;
- for (int j = max; j >= 0; j--) {
- if (count == k) {
- break;
- }
- //可能有相同的所以不用if,用while
- while (temp[j] > 0) {
- count++;
- System.out.println(j);
- temp[j]--;
- }
- }
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。