29最小的K个数
题目描述
如果基于数字的第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个数的更多相关文章
- 剑指Offer 29. 最小的K个数 (其他)
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题目地址 https://www.nowcoder.com/prac ...
- 29.最小的K个数
题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路分析: 利用快速排序的partition函数,par ...
- [剑指Offer] 29.最小的K个数
[思路1]全排序(快排)之后取出前K个数.O(K+nlogn) class Solution { public: vector<int> GetLeastNumbers_Solution( ...
- 剑指offer——python【第29题】最小的K个数
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路 先排序后取数,排序可以用冒泡,插入,选择,快排,二分法等等, ...
- 剑指offer(29)最小的K个数
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 题目分析 这题有两种方法来做. 第一种就是基于partition的 ...
- 《剑指offer》— JavaScript(29)最小的K个数
最小的K个数 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 思路一 使用JavaScript的Array对象的so ...
- 29、最小的K个数
一.题目 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 二.解法 import java.util.ArrayList; ...
- 【剑指Offer】29、最小的K个数
题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 解题思路: 本题最直观的解法就是将输入的n个整数排 ...
- 剑指29:最小的k个数
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. class Solution {public: vector& ...
随机推荐
- JavaScript如何定义数组。
JavaScript如何定义数组. 解答: var arrTest=new Array();
- 时间戳(Unix时间)
/// <summary> /// 时间戳与DateTime互转 /// </summary> public class UnixOfTimeHelper { /// < ...
- js 安全
0x00 前言 在信息安全领域,可信系统(Trusted system)是一个让人心动的目标,它指的是一个通过实施特定的安全策略而达到一定可信程度的系统. 在计算机中,可信平台模块(Trusted P ...
- java -Mac搭建本地服务器并映射到外网
最近在学习Html,小有进步变想着写一个浪漫的静态页面给女朋友浪漫一下,那么问题就来了,如何把我的网页让对网络一窍不通的女朋友看到,所以便想到了是用自己电脑作为服务器的想法.百度以后整理如下: 首先搭 ...
- (转)QT中QWidget、QDialog及QMainWindow的区别
QWidget类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己.每一个窗口部件都是矩形的,并且它们按Z轴顺序排列.一个窗口部件 ...
- Volley使用详细说明
前一篇粗略的介绍了一下Volley,并在最后附上了一段使用代码,这一篇详细的介绍一下Volley的使用.前面也说了Volley主要获取JSON对象和图片加载,这里也分为两部分介绍. 1.获取JSON对 ...
- JZOJ.3769【NOI2015模拟8.14】A+B
Description 对于每个数字x,我们总可以把它表示成一些斐波拉切数字之和,比如8 = 5 + 3, 而22 = 21 + 1,因此我们可以写成 x = a1 * Fib1 + a2 * F ...
- Poj1482
It's not a Bug, It's a Feature! Time Limit: 5000MS Memory Limit: 30000K Total Submissions: 1428 ...
- 【BZOJ4584】[Apio2016]赛艇 DP
[BZOJ4584][Apio2016]赛艇 Description 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着个划艇学校,编号依次为到.每个学校都拥有若干艘划艇.同一所学校的所 ...
- 【BZOJ4145】[AMPPZ2014]The Prices 状压DP
[BZOJ4145][AMPPZ2014]The Prices Description 你要购买m种物品各一件,一共有n家商店,你到第i家商店的路费为d[i],在第i家商店购买第j种物品的费用为c[i ...