29.最小的K个数
来源:互联网 发布:惠州综合网络问政平台 编辑:程序博客网 时间:2024/06/14 10:48
一、题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
二、解题思路
显然,这其实就是一道排序题,通常我们可以使用全排序,但是,这里要求找出最小的k个数,所以我们只找到最小的k个数即可
1、方法一:冒泡排序,时间复杂度O(n*k)
代码实现
/***冒泡排序,时间复杂度O(n*k)**/import java.util.ArrayList;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> list = new ArrayList<Integer>(); if (input.length < k){ return list; } for (int i = 0; i< k; i++){ for (int j = i + 1;j < input.length; j++){ if (input[j] < input[i]){ int temp = input[i]; input[i] = input[j]; input[j] = temp; } } } for (int i = 0; i < k; i++){ list.add(input[i]); } return list; }}
2、方法二:快速排序,时间复杂度不好预测,最坏O(nlgn)
代码实现
/***partition思想,时间复杂度O(n),基于数组第K个数字进行调整,使得比第K个数字小的都在数组左边,比第K个数字大的都在数组右边,这样调整后,位于数组中左边的K个数字就是最小的K个数字。**/import java.util.ArrayList;public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> list = new ArrayList<Integer>(); if (input == null || input.length == 0 || k > input.length || k <= 0){ return list; } int low = 0; int high = input.length - 1; int index = partition(input,low,high); while (index != k - 1){ if (index > k - 1){ high = index - 1; index = partition(input,low,high); } else { low = index + 1; index = partition(input,low,high); } } for (int i = 0; i < k; i++){ list.add(input[i]); } return list; } int partition(int []arr, int low, int high){ int pivot = arr[low]; while (low < high){ while ((low < high) && (arr[high] >= pivot)){ high--; } arr[low] = arr[high]; while ((low < high) && (arr[low] <= pivot)){ low++; } arr[high] = arr[low]; } arr[low] = pivot; return low; }}
0 0
- 29.最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的K个数
- 最小的k个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 深入浅出密码学---仿射加密
- android 当Activity中弹出对话框时,无法监听返回键
- nyoj106_背包问题(贪心or多重背包解法)
- 博为峰Java技术文章 ——JavaEE Hibernate实例状态
- 2017危中有机,中国股市和黄金大概率走牛
- 29.最小的K个数
- Web Service 浅谈-写的好清晰
- osg笔记三
- ThreadLocal详解
- jquery form表单.serialize()序列化后中文乱码问题原因及解决decodeURIComponent
- Linux的硬件时间及系统时间调用流程
- 典型的调度算法
- 入门Webpack,看这篇就够了
- AC自动机【poi2000】bzoj2938 病毒