面試題-華爲-數組去重與排序-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