标签:ble 冒泡排序 c++面试题 amp 运行 输出 参考 pre vector
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/,容易掉坑里。
运行结果:
标签:ble 冒泡排序 c++面试题 amp 运行 输出 参考 pre vector
原文地址:https://www.cnblogs.com/coder-tang/p/11229167.html