剑指offer之最小的k个数
2015-06-09 13:03
267 查看
题目(剑指offer面试题30):
输入n个整数,找出其中最小的k个数。例如输4、5、1、6、2、7、3、8这8个数,则最小的4个数为1、2、3、4。
分析:
可以利用快速排序算法Partition来解决,如果是基于第k个数来调整数组,那么调整后的数组的左边的数字都小于第k个数,右边都的数字都大于第k个数,这样的结果是左边的k个数字就是要找的最小的k个数字。
代码:
void GetLeastNumbers(int * input,int n,int* output,int k)
{
if(input == NULL || output == NULL || k > n || n <= 0 || k <= 0)
return ;
int start = 0;
int end = n -1 ;
int index = Partition(input,n,start,end);
while(index != k-1)
{
if(index > k-1)
{
end = index -1 ;
index = Partition(input,n,start,end);
} else {
start = index + 1;
index = Partition(input,n,start,end);
}
}
for(int i=0; i< k ; i++)
output[i] = input[i];
}
采用这种算法的限制就是输入的数组被改变了。
输入n个整数,找出其中最小的k个数。例如输4、5、1、6、2、7、3、8这8个数,则最小的4个数为1、2、3、4。
分析:
可以利用快速排序算法Partition来解决,如果是基于第k个数来调整数组,那么调整后的数组的左边的数字都小于第k个数,右边都的数字都大于第k个数,这样的结果是左边的k个数字就是要找的最小的k个数字。
代码:
void GetLeastNumbers(int * input,int n,int* output,int k)
{
if(input == NULL || output == NULL || k > n || n <= 0 || k <= 0)
return ;
int start = 0;
int end = n -1 ;
int index = Partition(input,n,start,end);
while(index != k-1)
{
if(index > k-1)
{
end = index -1 ;
index = Partition(input,n,start,end);
} else {
start = index + 1;
index = Partition(input,n,start,end);
}
}
for(int i=0; i< k ; i++)
output[i] = input[i];
}
采用这种算法的限制就是输入的数组被改变了。
相关文章推荐
- Html+Css新手简单快速仿京东商品分类导航
- JS对象的浅拷贝与深度拷贝
- Direct Buffer vs. Heap Buffer
- Direct Buffer vs. Heap Buffer
- ASP.NET关于引用bootstrap.css导致Gridview Header无法居中
- JavaScript-面向对象
- JavaScript获取数组最小值和最大值的方法
- JavaScript获取两个数组交集的方法
- JQuery POST请求乱码...
- @Html.Raw() 方法输出带有html标签的字符串
- JavaScript实现函数返回多个值的方法
- Java8 新JavaScript脚本引擎Nashorn小试
- Css 外边距折叠(collapsed margin ) 浅析
- JavaScript中的getDay()方法使用详解
- JS保留小数点,四舍五入
- 高德地图JavaScript API 自定义顶层Canvas与地图交互
- jquery.min.js一引入到工程中显示红叉
- 七牛js sdk调用file中的blob生成图片的md5值。
- 如何删除JSP编译后的空行
- JavaScript的Date()方法使用详解