题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
 
思路:
利用快速排序的partion 来解决

如果基于数字的第k个数字来调整,使得比第k个数字小的数字都位于数组的左边,比k个数字大的所有数字都位于数组右边。这样 调整之后,位于数组中左边的k个数字就行最小的k个数字(这k个不一定有序)。

 
 import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> res = new ArrayList<Integer>();
if(k>=input.length||k==0){
if(k==input.length){
for(int m=0;m<k;m++)
res.add(input[m]);
}
return res;
} int start =0;
int end = input.length-1; int j = partion(input,start,end);
while(j!=k-1){
if(j<k-1){
start=j+1;
j = partion(input,start,end);
}
else{
end=j-1;
j = partion(input,start,end);
}
} for(int m=0;m<k;m++)
res.add(input[m]);
return res;
}
private int partion(int a[] ,int lo,int hi){
int i = lo;
int j = hi+1;
int v = a[lo];
while(true){
while(a[++i]<v) if(i>=hi) break;
while(a[--j]>v) if(j<=lo) break;
if(i>=j) break;
swap(a,i,j);
}
swap(a,j,lo);
return j;
}
private void swap(int[] a,int i,int j){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
} }

20180310

 # -*- coding:utf-8 -*-
class Solution: def GetLeastNumbers_Solution(self, a, k):
# write code here
def partation(a, lo, hi):
if(lo > hi):
return
key = a[lo]
i = lo
j = hi
while(i < j):
while i < hi and a[i] <= key:
i += 1
while j > lo and a[j] >= key:
j -= 1
if(i<j):
swap(a, i, j)
swap(a, lo, j)
return j
def swap(a,i,j):
temp = a[i]
a[i] = a[j]
a[j] = temp if(k==len(a)):
return sorted(a)
if(k>len(a) or k ==0):
return []
lo = 0
hi = len(a) - 1
j = partation(a, lo, hi)
while(j != a[k - 1]):
if(j > k - 1):
hi = j - 1
j = partation(a, lo, hi)
else:
lo = j + 1
j = partation(a, lo, hi) return sorted(a[:k])

29最小的K个数的更多相关文章

  1. 剑指Offer 29. 最小的K个数 (其他)

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题目地址 https://www.nowcoder.com/prac ...

  2. 29.最小的K个数

    题目描述:   输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路分析:   利用快速排序的partition函数,par ...

  3. [剑指Offer] 29.最小的K个数

    [思路1]全排序(快排)之后取出前K个数.O(K+nlogn) class Solution { public: vector<int> GetLeastNumbers_Solution( ...

  4. 剑指offer——python【第29题】最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路 先排序后取数,排序可以用冒泡,插入,选择,快排,二分法等等, ...

  5. 剑指offer(29)最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 题目分析 这题有两种方法来做. 第一种就是基于partition的 ...

  6. 《剑指offer》— JavaScript(29)最小的K个数

    最小的K个数 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 思路一 使用JavaScript的Array对象的so ...

  7. 29、最小的K个数

    一.题目 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 二.解法 import java.util.ArrayList; ...

  8. 【剑指Offer】29、最小的K个数

      题目描述:   输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4.   解题思路:   本题最直观的解法就是将输入的n个整数排 ...

  9. 剑指29:最小的k个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. class Solution {public:    vector& ...

随机推荐

  1. React系列——react-redux之connect方法解析

      connect简介 前方高能预警,有耐心才能看完文章!! react-redux仅有2个API,Provider和connect,Provider提供的是一个顶层容器的作用,实现store的上下文 ...

  2. ubuntu 终端$换行

    编辑~/.bashrc文件 sudo gedit  ~/.bashrc 红色部分为添加的 \n if [ "$color_prompt" = yes ]; then    PS1= ...

  3. <!>贴图/音乐

    <img src=图片位址>贴图 <img src=图片位址 width=’180’>设定图片宽度 <img src=图片位址 height=’30’>设定图片高度 ...

  4. XML转换成数组方法

    <?php function xmlToArray2($xml) { // 将XML转为array $array_data = json_decode(json_encode(simplexml ...

  5. SpringBoot新增监听器Listener

    什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,HttpSession,ServletRequest的创建 ...

  6. STL中的排序算法

    本文转自:STL中的排序算法 1. 所有STL sort算法函数的名字列表: 函数名    功能描述 sort   对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 ...

  7. C++名人的网站 转

    正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物的网站也可以使我们得到最有价值的参考与借鉴. 正如我们可以通过计算机历史上的重要人物了解计算机史的发展,C++相关人物的网站也可 ...

  8. postgresql常用

    postgresql 字符串转整数 int.integer --把'1234'转成整数 select cast('1234' as integer ) ; --用substring截取字符串,从第8个 ...

  9. 学习使用turtlebot2——调试Hokuyo激光雷达(型号UST-10LX)

    目标 在ROS上调试使用Hokuyo激光雷达传感器 配置情况     电脑使用Ubuntu 14.04版本,ROS为 Indigo,激光雷达为Hokuyo(型号UST-10LX,网口型接口)   如果 ...

  10. 在Editplus中Dev C++配置C++的编译运行环境

    1.首先得下载安装DEV-cpp 2.打开Editplus编辑器,工具->配置自定义工具 3.具体配置 编译C:命令:D:\Dev-Cpp\MinGW64\bin\g++.exe参数:" ...