描写叙述:

给定一个整数数组。让你从该数组中找出最小的K个数

思路:

最简洁粗暴的方法就是将该数组进行排序,然后取最前面的K个数就可以。

可是,本题要求的仅仅是求出最小的k个数就可以,用排序能够但显然有点浪费。比方让求10000个整数数组中的最小的10个数。用排序的话平均时间复杂度差为Nlog(N)。

于是想到了,用堆来实现,可是自己实现又太麻烦。想到了java里面的TreeSet,先将K个数放入TreeSet中。因为TreeSet会对里面的元素进行排序。所以在TreeSet中的元素是有序的。以后没插入一个元素,将TreeSet中的最大元素删除就可以,所以TreeSet动态维持K个元素且这K个元素是有序的。

代码:

import java.util.TreeSet;public class FirstKElements
{public static TreeSet<Integer>getFirstKElements(int arr[],int k){TreeSet<Integer>set=new TreeSet<Integer>();int len=arr.length;k=k%len;int i=0;int num=0;for(i=0;i<k;i++)set.add(arr[i]);for(i=k;i<len;i++){set.add(arr[i]);num=set.last();set.remove(num);}return set;}public static void main(String[] args){// TODO Auto-generated method stubint arr[]={9,7,5,4,2,1,3,6,8};System.out.println(FirstKElements.getFirstKElements(arr, 4));}}

结果:

找出一堆数中最小的前K个数相关推荐

  1. 0206.BFPRT在一大堆数中求其前k大或前k小的问题,简称TOP-K问题(左神算法基础班源码)

    package basic_class_02;/*** * 在一大堆数中求其前k大或前k小的问题,简称TOP-K问题.* 而目前解决TOP-K问题最有效的算法即是BFPRT算法**/ public c ...

  2. 找出无序数组中最小的k个数(top k问题)

    2019独角兽企业重金招聘Python工程师标准>>> 给定一个无序的整型数组arr,找到其中最小的k个数 该题是互联网面试中十分高频的一道题,如果用普通的排序算法,排序之后自然可以 ...

  3. LeetCode 1198. 找出所有行中最小公共元素(二分/合并有序链表)

    文章目录 1. 题目 2. 解题 2.1 按列遍历 2.2 二分查找 2.3 合并k个有序链表 1. 题目 给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了. 请你帮忙找出在所有这些行 ...

  4. c语言:找出4数中最大值最小值

    n1.n2.n3.n4是一组需要找出最大最小值的整数 #include <stdio.h>int main() {int n1, n2, n3, n4, max1, max2, min1, ...

  5. 异或运算练习:找出一组数中唯一(唯二)出现奇数次的数

    题目描述 已知一个数组,现在请你用时间复杂度O(n),空间复杂度O(1)的算法求解: 1.假设数组中只有一个数的数量为奇数,其余都是偶数,请求出这个数. 2.假设数组中有两个数的数量为奇数,其余都是偶 ...

  6. topK问题——N个数中取最大的K个数

    topK问题 在海量数据中找出出现频率最高的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为topK问题. N个数中取最大的K个数,用小根堆:N个数中取最小的K个数,用大根堆:时间复杂 ...

  7. 找出一个字符串中出现次数最多的字_海量数据中找出前k大数(topk问题)

    在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题. 针对top K类问题,通常比较好的方案是分治+Trie树/hash+小顶堆(就是上面提到 ...

  8. C++100w个数中找出最大的前K个数

    /*100w个数中找出最大的前K个数*/ #include <iostream> using namespace std; #include <assert.h> const ...

  9. 找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}

    package com.homework.zw; //解题思路:先遍历二维数组的所有元素,用这些元素组成新的一维数组.然后利用冒泡排序找出一维数组的最大元素和最小元素. public class wo ...

最新文章

  1. LeetCode: 103. Binary Tree Zigzag Level Order Traversal
  2. HDU4279(2012年天津网络赛---数论分析题)
  3. 2015年10月15日项目经理中项作业(质量管理与人力资源管理)
  4. MHA manage节点安装报错解决
  5. python文本文件csv_我的第一个Python项目:如何将杂乱无章的文本文件转换为纯净的CSV文件
  6. 基于lucene语法的实时文本搜索与匹配--Tripod
  7. php json对象转为字符串,JSON对象转化为字符串(附上代码详细解答)
  8. 你的伙伴对你最大会话_TeamViewer许可证对您与伙伴的最大会话有所限制解决办法...
  9. android 视频通话框架,Android基于腾讯云实时音视频仿微信视频通话最小化悬浮
  10. Unity3D 学习笔记6 ——协程
  11. 大数据HBase(四):HBase的相关操作-客户端命令式
  12. 中资电信银行股将成市场旗手
  13. 太多人问Protobuf的问题了,我只好把这个重新搬出来!
  14. 分析黑客入侵 PostgreSQL 数据库
  15. MySQL表关联关系
  16. hive 窗口函数--常用函数介绍
  17. 服务器uefi装系统教程,uefi模式怎么重装系统_win10uefi装系统步骤教程
  18. Python怎么买入卖出
  19. 上海海事大学计算机考研资料汇总
  20. 从领先行业到定义标准 小鱼易连全线新品发布让云视频真正进化

热门文章

  1. UA MATH564 概率论VI 数理统计基础4 t分布
  2. UA MATH575B 数值分析下IV 带约束的优化
  3. 自己添加ODBC数据源的Access驱动
  4. 图解在emu8086中学习汇编语言数字比较程序
  5. 图解Oracle同义词
  6. Set 的合集 并集 差集
  7. LeetCode-35. Search Insert Position
  8. 第四章:4.2MySQL 权限系统介绍
  9. 嵌入式Linux下S3C2410的调色板彩色显示
  10. delphi数组问题