20190722 C++面试题

Posted coder-tang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20190722 C++面试题相关的知识,希望对你有一定的参考价值。

1.给定一个数组,要求将数组中重复出现元素的次数大于数组长度的一半的元素返回,如果没有,则返回-1. 例如数组 int arr[] = {1, 2, 2, 2, 3},因为元素2出现的次数3大于数组长度的一半(5/2 = 2),所以输出2,否则输出-1。

思路:遍历数组,将数组元素和对应元素出现的次数用一个关联容器map保存下来,每次遍历后便更新map容器,最后遍历map容器,判断map中的value是否大于数组长度的一半,如果是,则返回map中的key,整个map容器遍历完都没有的话,便返回-1。

 

 1 int GetMultiElements(vector<int> &v)
 2 {
 3     map<int, int> m; //定义一个map容器
 4     for (auto i : v) //遍历数组
 5     {
 6         auto it = m.find(i);
 7         if(it != m.end())//判断容器中是否已有key值
 8         {
 9             it->second++;//value++
10         }else
11         {
12             //没有则往map中插入数据 下面给了map容器插入数据的三种方式
13             m.insert(map<int, int>::value_type(i, 1));
14 //            m.insert(pair<int, int>(i, 1));
15 //            m.insert(make_pair(i, 1));
16         }
17     }
18     for (auto i = m.begin(); i != m.end(); ++i)//遍历map容器
19     {
20         if (i->second > v.size()/2)//判断元素出现次数value是否大于数组长度一半
21             return i->first;//返回相应的key
22     }
23     return -1;
24 }

2.给定一个数组,对其进行冒泡排序,排序后删除数组中值为偶数的元素。

相对来说比较简单,直接上代码。

 1 void Bubble_sort(vector<int> &v)
 2 {
 3     for (int i = 0; i < v.size() - 1; i++)
 4     {
 5         bool exchanged = false;
 6         for (int j = 0; j < v.size() - i - 1; j++)
 7         {
 8             if (v[j] > v[j + 1])
 9             {
10                 int tmp = v[j];
11                 v[j] = v[j + 1];
12                 v[j + 1] = tmp;
13                 exchanged = true;
14             }
15         }
16         if(!exchanged)
17             break;
18     }
19 }
20 
21 int main(void)
22 {
23     int arr[] = {1, 4, 8, 5, 3, 3, 0};
24     vector<int> v(arr, arr+7);
25     cout << "original data:" << endl;
26     for (auto i : v)
27         cout << i << " ";
28     cout << endl;
29     Bubble_sort(v);
30     cout << "after bubble sort:" << endl;
31     for (auto i : v)
32         cout << i << " ";
33     cout << endl;
34     auto it = v.begin();
35     while(it != v.end())
36     {
37         if(*it & 1)
38             ++it;
39         else
40             v.erase(it);
41     }
42     cout << "after delete:" << endl;
43     for (auto i : v)
44         cout << i << " ";
45     cout << endl;
46     return 0;
47 }

需要注意的是删除偶数元素时,erase的用法去参考一下http://www.cplusplus.com/reference/vector/vector/erase/,容易掉坑里。

运行结果:

技术图片

 

以上是关于20190722 C++面试题的主要内容,如果未能解决你的问题,请参考以下文章

前端面试题之手写promise

一道经典面试题:字符串在Java中如何通过“引用”传递

面试必备 | 常见C++笔试面试题整理

c++面试题转

Java工程师面试题,二级java刷题软件

C++面试题