2023年浦发银行编程题1——C++
题目描述:输入一个数组arr和一个数k,输出数组arr中出现k次的数组元素,且按升序输出(不可用编程语言自带的算法算法函数)
示例:
输入:[1,3,1,4,1,3,3,5,2],3
输出:[1,3]
自己写的垃圾代码,很简单的暴力搜索的思想,欢迎优化交流
vector<int> sollution(vector<int> &arr,int k)
{
vector<int> result;
if (k <= 0 || arr.size() == 0)//arr为空或k<=0,直接返回空的数组
return result;
for (int i = 0; i < arr.size(); i++){
int key = arr[i];
int flag = 0;
for (int j = 0; j < result.size(); j++){
if (result[j] == key){//记录result中是否已有当前的key,避免result中出现重复元素
flag = 1;
break;
}
}
if (1 == flag)
continue;
else//result中无该元素
{
int count = 0;
for (int m = 0; m < arr.size(); m++){
if (arr[m]==key)//记录key在数组中的重复次数
count++;
}
if (count == k)
result.push_back(key);
}
}
for (int i = 0; i < result.size()-1; i++){//冒泡排序
for (int j = 0; j < result.size() - i-1; j++){
if (result[j] > result[j + 1]){
int temp = result[j];
result[j] = result[j+1];
result[j + 1] = result[j];
}
}
}
return result;
}