题目描述

输入n个整数,输出其中最小的k个。

详细描述:

接口说明

原型:

bool GetMinK(unsignedint uiInputNum, int * pInputArray, unsignedint uiK, int * pOutputArray);

输入参数:

unsignedint uiInputNum //输入整数个数

int * pInputArray  //输入整数数组

unsignedint uiK   //需输出uiK个整数

输出参数(指针指向的内存区域保证有效):

int * pOutputArray //最小的uiK个整数

返回值:

false 异常失败

true  输出成功

输入描述:

输入说明 
1 输入两个整数 
2 输入一个整数数组

输出描述:

输出一个整数数组

示例1

输入

5 2
1 3 5 7 2

输出

1 2

代码如下:

 package com.yzh.hehe;

 import java.util.Scanner;

 public class OutputNMin {
/*
* 先以o(n)时间建一个堆,再依次删除k个堆顶值
*
* */
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while ( scanner.hasNext()) {
int size=scanner.nextInt();
int k=scanner.nextInt();
int[]arr=new int[size+1];
int temp;
for (int i = 1; i <= size; i++) {
temp=scanner.nextInt();
insertHeap(arr, temp,i);
}
for (int i = 0; i < k; i++) {
deleteHeapMain(arr, size-i);
}
int p=size-k+1;
for (int i =size ; i >p; i--) {
System.out.print(arr[i]);
System.out.println(" ");
}
System.out.print(arr[p]);
}
scanner.close(); }
//建堆 执行n次建堆操作O(n)
private static void insertHeap(int[] arr,int value,int p) {
int i;
for ( i = p; i>1&&arr[i/2]>value; i=i/2) {
arr[i]=arr[i/2];
}
arr[i]=value;
}
//删除堆顶值(最小值)
private static void deleteHeapMain(int[]arr,int length) {
int reV=arr[1];//删除第一个值
int lastV=arr[length];
int i,child;
//2*i <=length保证空格还没下沉到最底层
for (i = 1; 2*i <=length ;i=child ) {
child=2*i;
if(child!=length&&(arr[2*i]>arr[2*i+1])){
child++; //判断走左还是走右
}
//判断是否能将最后一个值插入到目前的空格
if(lastV>arr[child]){
arr[i]=arr[child];
}else{
break;
}
}
arr[i]=lastV; //插入最后一个值
arr[length]= reV;//用来存储删除的第一个值
}
}

解题6(OutputNMin)的更多相关文章

  1. SCNU ACM 2016新生赛决赛 解题报告

    新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...

  2. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  3. HDU 3791二叉搜索树解题(解题报告)

    1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...

  4. 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划

    [BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...

  5. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  6. wechall.net/stegano 解题心得

    /* 转载请注明出处:http://www.cnblogs.com/Martinium/p/wechall_stegano.html */ 最近迷上了 www.wechall.net 网站,里面都是些 ...

  7. Mountains(CVTE面试题)解题报告

    题目大意: 用一个数组代表群山的高度.高度大的地方代表山峰,小的地方代表山谷.山谷可以容水.假设有一天下了大雨,求群山中总共可以容纳多少水? 如图所示情况,a代表该数组,总共可以容纳5个水. 解题思路 ...

  8. timus 1180. Stone Game 解题报告

    1.题目: 1180. Stone Game Time limit: 1.0 secondMemory limit: 64 MB Two Nikifors play a funny game. The ...

  9. timus 1175. Strange Sequence 解题报告

    1.题目描述: 1175. Strange Sequence Time limit: 1.0 secondMemory limit: 2 MB You have been asked to disco ...

随机推荐

  1. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameters 我不理解为何 ROS wiki 要把service与parameter放在一起介绍, 很想分 ...

  2. SAP系统中ASCS、ERS、PAS、AAS

    SAP系统中ASCS.ERS.PAS.AAS是什么: ASCS:ABAP Central services instance (Message server) PAS: Primary applica ...

  3. 16.Mongodb安装

    Mongodb是由c++编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活. 1.相关链接: http ...

  4. 最好的ie版本检测方式

    预备知识:NodeList的实时性 通过 document.getElementsByTagName,document.forms ,document.images  等方法获取到nodelist以后 ...

  5. C# NPOI生成Excel文档(简单样式)

    效果图: 代码:  /// <summary> /// 导出Excel /// </summary> /// <param name="DeptId" ...

  6. hive命令的执行方式

    1.通过cli直接执行 2.hive -e "hql" 如:[root@host ~]# hive -e "use gamedw;show tables" [r ...

  7. TypeError: 'range' object doesn't support item deletion

    python 是个逐步迭代开发的过程,他不是向下兼容的,更不是向上兼容,版本不一致,好端端的程序就是不能运行了. 下面是在python 2中能运行,在Python 3中不能运行的代码.其实也很简单.但 ...

  8. 【JEECG技术文档】JEECG online 表单填值规则使用说明

    1. 功能介绍 JEECG online规则值自动生成功能 为实现online表单数据初始化功能. 为实现图中红框字段初始化功能,需要完成下面4步操作: 1)编写规则实现类 2) 配置填值规则 3)o ...

  9. C语言基础入门

    搭建Windows平台C/C++开发环境 第1步: 第2步: 第3步: 第4步: 第5步: 第6步: 第7步: 第8步: 第9步: 第10步: 第11步: 第12步: 第13步: 第14步: 第15步 ...

  10. git 每次push都需要输入用户和密码

    git remote -v origin https://github.com/userName/xx.git (fetch) origin https://github.com/userName/x ...