面试题-华为-数组去重与排序-2

来源:互联网 发布:神话打电话软件 编辑:程序博客网 时间:2024/05/18 03:33

面试题-华为-数组去重与排序-2

华为的面试题比想象中简单,可能是没有遇到更复杂的题目,没有涉及数据结构与算法(o(╯□╰)o)。数组的去重可以使用python的set集实现,但是由于本人python不熟,最后还是选择使用C++实现。

该面试编程题来自于牛客网,本人分享在此仅供大家学习与交流用,不担负任何法律责任。博客版权归博主所有,转载需注明出处。

问题描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

Input Param
n 输入随机数的个数
inputArray n个随机整数组成的数组
Return Value
OutputArray 输出处理后的随机整数

注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

输入描述:

输入多行,先输入随机整数的个数,再输入相应个数的整数

输出描述:

返回多行,处理后的结果

输入例子:

11
10
20
40
32
67
40
20
89
300
400
15

输出例子:

10
15
20
32
40
67
89
300
400

思考与解答

当时绞尽脑汁想注明使用C++进行去重,去重之后排序,后来简单百度一下,发现大家的方法大部分是先去排序后去重。排序后相同的两个元素会处于前后两位,输出的时候如果相等只输出一个即可,真是简单粗暴。下面是实验代码:

//C++实现#include <iostream>using namespace std;const int N = 1000;void bubble_sort(int *a,int num);int main(){    int num,a[N];    cin >> num;    if(num > N)        return 0;    for(int i=0;i<num;i++)    cin >> a[i];    //for(int i=0;i<num;i++)    //  cout << a[i] <<endl;    //先排序,后剔除重复元素      bubble_sort(a,num);   // for(int i=0;i<num;i++)   //   cout << a[i] <<endl;    for(int i=0;i<num;i++)    {    //菜鸟水平,看官勿笑        if(a[i]==a[i+1])        {        cout<<a[i]<<endl;        i++;    }    else        cout<<a[i]<<endl;    }    return 0;}//冒泡排序void bubble_sort(int *a,int num){    int i ,j,temp;    for(j=0;j<num-1;j++)    for(i=0;i<num-1-j;i++)    {        if(a[i]>a[i+1])        {            temp = a[i];            a[i] = a[i+1];            a[i+1] = temp;        }           }}

上面提到如果使用python的set集可以在输入的时候直接去重,但是排序需要用到list,本人暂时对python不熟,所以没有话时间研究,有兴趣的同学可以试试。

                                          2017年02月07日19:59:44
0 0
原创粉丝点击