描述 |
输入n个整数,输出其中最小的k个。 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int * pInputArray, unsignedint uiK, int * pOutputArray); 输入参数: unsignedint uiInputNum //输入整数个数 int * pInputArray //输入整数数组 unsignedint uiK //需输出uiK个整数 输出参数(指针指向的内存区域保证有效): int * pOutputArray //最小的uiK个整数 返回值: false 异常失败 true 输出成功 |
---|---|
知识点 | 循环,数组 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 |
输入说明 |
输出 |
输出一个整数数组 |
样例输入 | 5 2 1 3 5 7 2 |
样例输出 | 1 2 |
package com.oj; import java.util.Scanner; public class Test { public static void sinkDown(int[] data,int k,int length){ while(2*k<=length){ int maxpos = 2*k; if(data[maxpos]>data[maxpos+1]) maxpos += 1; if(data[k]>data[maxpos]){ int temp = data[maxpos]; data[maxpos] = data[k]; data[k] = temp; k = maxpos; }else break; } } public static void deleteMin(int[] data,int length){ System.out.print(data[1]); data[1] = data[length]; length--; sinkDown(data,1,length); } public static void main(String[] args) { Scanner in = new Scanner(System.in); String[] numstr = in.nextLine().split(" "); int num = Integer.parseInt(numstr[0]); int n = Integer.parseInt(numstr[1]); String[] datastr = in.nextLine().split(" "); int[] data = new int[datastr.length+1]; //System.out.println("hello "); for(int i = 1;i <= num; i++) data[i] = Integer.parseInt(datastr[i-1]); for(int i = num/2;i >= 1; i--) sinkDown(data,i,data.length); for(int i = 1;i <= n; i++){ deleteMin(data,data.length-i); if(i!=n) System.out.print(" "); else System.out.println(); } System.out.println(); // for(int i = 1; i <= (num-n) ; i++) // System.out.print(data[i]+" "); } }