面試題-華爲-數組去重與排序-2

面試題-華爲-數組去重與排序-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
發佈了24 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章