校招试题 n个数里最小的k个 stringstream运用

找出n个数里最小的k个

输入描述:
每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n
不超过100。
输出描述:
输出n个整数里最小的k个数。升序输出
输入例子1:
3 9 6 8 -10 7 -11 19 30 12 23 5
输出例子1:
-11 -10 3 6 7
#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
int num[maxn];
int i=0;
string s;
stringstream ss;
int main()
{
     getline(cin, s);
    ss.clear();
    ss.str(s);
    int tmp;
    while (1)
    {
        ss >> tmp;
       // cout<<tmp<<endl;
        num[i++] = tmp;
        if ( ss.fail() ) break;
        //sum+=a;
    }
    int len = num[i-1];
    sort(num,num+i-2);
    for(int i=0;i<len;i++)
        printf("%d%c",num[i],i==len-1?‘\n‘:‘ ‘);
}

  

原文地址:https://www.cnblogs.com/masterchd/p/8977335.html

时间: 2024-11-08 23:07:58

校招试题 n个数里最小的k个 stringstream运用的相关文章

算法:找出 n 个数中最小的 k 个数

最简单的方法是将n个元素排序,取出最小的k个元素.这个算法的时间复杂度为 O(nlgn). 然而在输入的n个元素互异的情况下,利用最大堆,我们可以获得时间复杂度为 O(nlgk)的算法. 1 #include <stdio.h> 2 3 #define N 128 4 5 int heap[N], max_size, cur_pos = 1; 6 7 void adjust(int i) { // bottom up 8 int x = heap[i]; 9 int p = i / 2; 10

剑指Offer面试题30(java版):最小的k个数

题目:输入n个整数,找出其中最小的k个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4 这道题最简单的思路莫过于把输入的n个整数排序,排序之后位于最前面的k个数就是最小的k个数.这种思路的时间复杂度是O(nlogn),面试官会提示我们还有更快的算法. 解法一:O(n)的算法,只有当我们可疑修改输入的数组时可用 从上一题中我们可以得到启发,我们同样可以基于Partition函数来解决这个问题.如果基于数组的第k个数字来调整,使得比第k个数字小的所有数字都位于数

IT公司100题-5-查找最小的k个元素

问题描述: 输入n 个整数,输出其中最小的k 个. 例如输入8, 7, 6, 5, 4, 3, 2, 1这8 个数字,则最小的3 个数字为3, 2, 1. 问题分析: 时间复杂度O(nlogn)方法: 对n个整数升序排序,取数组前面k个数就是最小的k个数,时间复杂度为O(nlogn),空间复杂度为O(1). 大顶堆,时间复杂度为O(nlogk): 我们可以采用大顶堆来保存最小的k个数,堆顶元素就是k个最小的数中最大的.新来一个元素的时候,与堆顶元素进行比较,如果比堆顶元素大,则直接丢弃.如果比堆

5.查找最小的k个元素

http://zhedahht.blog.163.com/blog/static/2541117420072432136859/ http://blog.csdn.net/liangbopirates/article/details/9377105 http://blog.csdn.net/v_JULY_v/article/details/6370650 题目:输入n个整数,输出其中最小的k个. 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4. 分析: 这道题

面试题40. 最小的k个数

面试题40. 最小的k个数 问题描述: 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 解题思路: 这题不要直接使用 sort(arr.begin(), arr.end() ) 函数: 时间复杂度:O(n\log n)O(nlogn),其中 nn 是数组 arr 的长度.算法的时间复杂度即排序的时间复杂度. 空间复杂度:O(\log n)O(logn) ,排序所需额外的空间复杂度为 O(\log n)O(l

【面试题030】最小的k个数

[面试题030]最小的k个数 题目: 输入n个整数,找出其中最小的k个数. 例如输入4.5.1.6.2.7.3.8这8个字,则其中最小的4个数字是1.2.3.4. 思路一: 可以同样的基于随机快速排序的Partition函数,来对数组做划分, 基于k来作调整,返回调用Partition函数,直到左边的k个数字是整个数组中最小的k个数字. ps.这种方法要修改数组中数字的顺序,因为Partition函数会调整数组中数字的顺序. 12345678910111213141516171819202122

小米笔试题:无序数组中最小的k个数

题目描述 链接:https://www.nowcoder.com/questionTerminal/ec2575fb877d41c9a33d9bab2694ba47?source=relative 来源:牛客网 无序数组中最小的k个数 对于一个无序数组,数组中元素为互不相同的整数,请返回其中最小的k个数,顺序与原数组中元素顺序一致. 给定一个整数数组A及它的大小n,同时给定k,请返回其中最小的k个数. 测试样例: [1,2,4,3],4,2 返回:[1,2] 代码 需要保留K个较小的元素,可以删

找到无序数组中最小的k个数

题目:给定一个无序整数数组arr,找到其中最小的k个数 要求:如果数组arr的长度为n,排序之后自然可以得到最小的k个数,此时时间复杂度与排序的时间复杂度相同均为O(NlogN),本题要求实现时间复杂度为O(NLogK). 1.O(NLogK)的方法,即一直维护一个有k个数的最大的大根堆,这个堆是目前选出的k个最小数,在堆里的k个元素中堆顶的元素是最大的一个. 接下来遍历整个数组,遍历的过程中看当前数是否比堆顶元素小.如果是,就把堆顶的元素替换成当前的数,然后从堆顶的位置调整堆,替换后堆的最大元

【算法】数组与矩阵问题——找到无序数组中最小的k个数

1 /** 2 * 找到无序数组中最小的k个数 时间复杂度O(Nlogk) 3 * 过程: 4 * 1.一直维护一个有k个数的大根堆,这个堆代表目前选出来的k个最小的数 5 * 在堆里的k个元素中堆顶的元素是最小的k个数中最大的那个. 6 * 2.接下来,遍历整个数组,遍历过程中看当前数是否比堆顶元素小: 7 * 如果是,就把堆顶元素替换成当前的数,然后从堆顶的位置调整整个堆,让替 8 * 换操作后堆的最大元素继续处在堆顶的位置: 9 * 如果不是,则不进行任何操作,继续遍历下一个数: 10 *