剑指offer 编程题(27):数组中出现次数统计

来源:互联网 发布:网络怎么加速 编辑:程序博客网 时间:2024/05/22 06:27

题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0

class Solution {public:    int MoreThanHalfNum_Solution(vector<int> numbers) {        if(numbers.size() == 0)            return 0;        map<int,int> countmap;        int size = numbers.size()/2;        for(int i=0; i<numbers.size(); ++i)        {            countmap[ numbers[i] ]++;            if(countmap[ numbers[i] ] > size)                return numbers[i];        }        return 0;    }};

扩展一:统计数组中出现次数最多的数字,返回最多次数。

class Solution {public:    int MoreThanHalfNum_Solution(vector<int> numbers) {        if (numbers.size() == 0)            return 0;        int maxcount = 0;        map<int, int> countmap;        //int size = numbers.size() / 2;        for (int i = 0; i < numbers.size(); ++i)        {            countmap[numbers[i]]++;            if (countmap[numbers[i]] > maxcount)                maxcount = countmap[numbers[i]];        }        return maxcount;    }};

扩展二:统计数组中出现次数最多的数字,返回最多次数的那个数字。

class Solution {public:    int MoreThanHalfNum_Solution(vector<int> numbers) {        if (numbers.size() == 0)            return 0;        int maxcount = 0;        int maxnumber = 0;        map<int, int> countmap;        //int size = numbers.size() / 2;        for (int i = 0; i < numbers.size(); ++i)        {            countmap[numbers[i]]++;            if (countmap[numbers[i]] > maxcount)            {                maxcount = countmap[numbers[i]];                maxnumber = numbers[i];            }        }        return maxnumber;    }};

扩展三:统计数组中出现次数,返回第二多次数的那个数字。

class Solution {public:    int MoreThanHalfNum_Solution(vector<int> numbers) {        if (numbers.size() == 0)            return 0;        int maxcount = 0;        int maxnumber = 0;        int seccount = 0;        int secnumber = 0;        map<int, int> countmap;        int size = numbers.size() / 2;        for (int i = 0; i < numbers.size(); ++i)        {            countmap[numbers[i]]++;        }        for (int i = 0; i < countmap.size(); ++i)        {            if (countmap[numbers[i]] > maxcount)            {                seccount = maxcount;                secnumber = maxnumber;                maxcount = countmap[numbers[i]];                maxnumber = numbers[i];            }            else if(countmap[numbers[i]] > seccount && countmap[numbers[i]] <= maxcount)            {                seccount = countmap[numbers[i]];                secnumber = numbers[i];            }        }        cout << "最多次数的数字是:" << maxnumber << "出现了" << maxcount << "次"<<endl;        cout<< "第二多次数是:" << secnumber << "出现了" << seccount << "次" << endl;        return secnumber;    }};

扩展四:统计字符串中出现次数,返回出现最多次数的那个字符。‘

#include<iostream>  #include<string>  #include<stdlib.h>using namespace std;int main(){    string str;    cout << "input some text:" << endl;    getline(cin, str);    int maxcount = 0;    string maxstring;    int cnt[256] = {};    for (int i = 0; i<str.size(); i++)        cnt[(int)str[i]]++;    for (int i = 0; i<256; i++)//输出字符出现次数      {        if (cnt[i] != 0)            cout << (char)i << ':' << cnt[i] << endl;        if (cnt[i] > maxcount)        {            maxcount = cnt[i];            maxstring = (char)i;        }    }    cout <<"出现次数最多的字符是"<< maxstring << "出现了"<<maxcount<<"次" << endl;    system("pause");}
class Solution {public:    string MoreThanHalfNum_Solution(string str)     {        int maxcount = 0;        string maxstring;        int cnt[256] = {};        for (int i = 0; i<str.size(); i++)            cnt[(int)str[i]]++;        for (int i = 0; i<256; i++)//输出字符出现次数          {            if (cnt[i] != 0)                cout << (char)i << ':' << cnt[i] << endl;            if (cnt[i] > maxcount)            {                maxcount = cnt[i];                maxstring = (char)i;            }        }        cout << "出现次数最多的字符是" << maxstring << "出现了" << maxcount << "次" << endl;        return maxstring;    }};
#define _CRT_SECURE_NO_WARNINGS 1  #include<stdio.h>  #include<stdlib.h>  #include<assert.h>  #include<string>#include<iostream>#include<vector>#include<map>using namespace std;class Solution {public:    string MoreThanHalfNum_Solution(string str)     {        int maxcount = 0;        string maxstring;        map<char, int> cnt;        for (int i = 0; i<str.size(); i++)            cnt[str[i]]++;        for (int i = 0; i<cnt.size(); i++)//输出字符出现次数          {            if (cnt[i] != 0)                cout << (char)i << ':' << cnt[i] << endl;            if (cnt[i] > maxcount)            {                maxcount = cnt[i];                maxstring = (char)i;            }        }        cout << "出现次数最多的字符是" << maxstring << "出现了" << maxcount << "次" << endl;        return maxstring;    }};int main(){    string b = "aaaaaabbbbbbbbbccccddddddddddddddddddddd";    Solution s;    string count;    count = s.MoreThanHalfNum_Solution(b);    cout << count << endl;    system("pause");    return 0;}
阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我媳妇删了我该怎么办 老婆离家出走不照顾小孩怎么办 车停在4s店损坏怎么办 车辆年检贴丢了怎么办 卖衣服别人嫌贵怎么办 武汉铁路医保卡丢了怎么办 高铁列车员年龄大了怎么办 尚客优酒店会员怎么办 钢铁雄心4人力不足怎么办 未经车主同意私自将车卖了怎么办 剧本给几个制片人看过怎么办 没有产品经理ui设计师怎么办 老板请朋友吃饭司机应该怎么办 被化妆学校坑了怎么办 快车约得太远怎么办 工资好低2000多怎么办 苹果手机不能下载软件怎么办 苹果手机下不了软件怎么办 苹果6s下不了软件怎么办 苹果6下不了软件怎么办 ipad更新系统卡住了怎么办 ipad卡住了关不了机怎么办 ipad卡住了没反应怎么办 苹果7下不了软件怎么办 苹果手机开机密码忘了怎么办 苹果开机密码忘了怎么办 我的ipad很卡怎么办 6s升级后卡顿严重怎么办 软件升级后手机卡顿怎么办 ps通道抠图模糊怎么办 电脑锁屏死机了怎么办 ipad电源键坏了怎么办 华为平板死机黑屏了怎么办 苹果4s锁屏键坏了怎么办 平板电脑密码锁忘记密码怎么办 苹果平板电脑密码锁忘记密码怎么办 平板电脑密码锁密码锁死怎么办 小米平板黑屏按键亮怎么办 小米平板黑屏没反应怎么办 小米平板一刷黑屏了怎么办 小米4卡死了怎么办啊