华为往年笔试题【去重和排序】【vertor二维数组,迭代器】

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

 Input Param

n               输入随机数的个数

inputArray      n个随机整数组成的数组

Return Value

OutputArray    输出处理后的随机整数

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

自己比较笨的解法:

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4  
 5  
 6 using namespace std;
 7  
 8 void uniq_sort(vector<int> & array){
 9         for(vector<int>:: iterator it = array.begin(); it != array.end();it++){
10                 for (vector<int>:: iterator jt = it+1 ; jt != array.end();)
11                 {
12                         if(* jt < * it)
13                         {
14                                 int temp = * it;
15                                 * it = * jt;
16                                 * jt = temp;
17                                 jt ++ ;
18                         }
19                         else if(* jt == * it){
20                                 jt = array.erase(jt);
21                         }
22                         else
23                         {
24                                 jt ++ ;
25                         }
26                 }
27         }
28 }
29  
30 int main(){
31  
32         vector<vector<int>> init_array;
33         int n = 0;
34         /*if(cin >> n)
35         {
36                 for(int i = 0 ; i < n ; i ++){
37                         cin >>
38                 }
39         }*/
40         while(cin >> n){
41                 vector<int> temp_array;
42                 for(int i = 0 ; i < n ; i ++){
43                         int temp;
44                         cin >> temp;
45                         temp_array.push_back(temp);
46                 }
47                 init_array.push_back(temp_array);
48                 //test_num ++;
49                 //init_array.push_back(n);
50         }
51         for(int i = 0; i < init_array.size() ;i++){
52                 uniq_sort(init_array[i]);
53                 for( int j = 0; j < init_array[i].size() ; j++ )
54                 {
55                         cout << init_array[i][j] << endl;
56                 }
57                 //cout << endl;
58         }
59         return 0 ;
60 }

大神机智解法:

因为题目中限制了1-1000内的随机整数

 1 #include <iostream>
 2 using namespace std;
 3 int main() {
 4     int N, n;
 5     while (cin >> N) {
 6         int a[1001] = { 0 };
 7         while (N--) {
 8             cin >> n;
 9             a[n] = 1;
10         }
11         for (int i = 0; i < 1001; i++)
12             if (a[i])
13                 cout << i << endl;
14     }
15     return 0;
16 }

 

posted @ 2019-04-05 10:51  李嘉信  阅读(323)  评论(0编辑  收藏  举报