2014华为机试题——取出整型数据中出现次数最多的元素,并按照升序排列返回

来源:互联网 发布:php api接口开发 框架 编辑:程序博客网 时间:2024/05/22 13:38
// 取出整型数据中出现次数最多的元素,并按照升序排列返回。// 要求实现方法: // public static int[] calcTimes(int[] num, int len);// 【输入】 num:整型数组;// len 输入的整数个数// 【返回】 按照升序排列返回整型数组中出现次数最多的元素// 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出// 示例 // 输入:num = {1,1,3,4,4,4,9,9,9,10} len = 10// 返回:{4,9}#include <IOSTREAM>#include <QUEUE>#include <algorithm>using namespace std;int compare(const void *p, const void *q){return *(const int *)p - *(const int *)q;}queue<int>  calcTimes(int arr[], int len){queue<int> myQueue;qsort(arr, len, sizeof(int), compare);int maxTime = 0; //最多元素出现的次数int oneTime = 1; //单次中数字出现的次数,注意每次初始值为1for (int i=0; i<len-1; ++i){if (arr[i] ==arr[i+1])++oneTime;else{if (oneTime == maxTime){myQueue.push(arr[i]);}else if (oneTime > maxTime){while (!myQueue.empty()){myQueue.pop();}myQueue.push(arr[i]);maxTime = oneTime;}oneTime = 1;}}//end for//对最后一个元素要特殊处理if (maxTime <= 1){//当出现的元素次数最多为1时,要把最后一个放入myQueue.push(arr[i]);}return myQueue;}int main(){int arr[20] = {1,4,9,1,9,3,4,4,9,10}; //结果为:4 9//int arr[20] = {1,3,5,8,29,33,9,13,18,4}; 结果为: 1 3 4 5 8 9 13 18 29 33int len = 10;queue<int> que(calcTimes(arr, len));while (!que.empty()){cout << que.front() << " ";que.pop();}return 0;}

0 0
原创粉丝点击