剑指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
- 剑指offer 编程题(27):数组中出现次数统计
- 剑指offer 编程题(36):数字在排序数组中出现的次数
- 剑指offer:数组中出现的次数
- 剑指offer-38 统计一个数字在排序数组中出现的次数
- 《剑指Offer》面试题:统计一个数字在排序数组中出现的次数
- 【剑指offer】统计一个数字在排序数组中出现的次数
- 剑指offer-统计一个数字在排序数组中出现的次数-PHP
- 《剑指offer》刷题笔记(时间效率):数组中出现次数超过一半的数字
- 剑指offer第28题(数组中出现次数超过一半的数字)
- 【剑指Offer面试编程题】题目1370:数组中出现次数超过一半的数字--九度OJ
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
- 剑指offer 编程题(30):自然数中出现1的次数
- 【剑指offer】数字在排序数组中出现的次数
- 【剑指offer】Q38:数字在数组中出现的次数
- 剑指offer--数组中出现次数超过一半的数字
- 剑指offer--数字在排序数组中出现的次数
- 《剑指offer》数组中出现次数超过一半的数字
- 《剑指offer》数字在排序数组中出现的次数
- 系统分析师--经济管理2:企业相关--业绩评价
- linux常用命令
- assert(0)
- 《大数据架构详解》读后感
- Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) B
- 剑指offer 编程题(27):数组中出现次数统计
- JSON遇到中文乱码问题的解决方法
- Java内存区域(栈、堆、方法区)详细解说
- 92. Reverse Linked List II
- 大数据
- javascript解析URL中的参数——返回对象
- WebStorm添加注释模板
- 程序员修炼之道(通俗版)——第一章
- Linux下C++调用python中训好的mxnet模型