C++数组查重
今天课上实验课,遇到一道题目,需要查找一个数组中出现次数最多的元素和次数,并且输出。第一次用struct模拟字典,十分麻烦而且复杂度是O(n*n)。其实,运用转化的思想,可以先将其排序,然后再查找即可,时间复杂度之后只有O( n*log_2(n))。
题目是这样的:
某小镇要票选镇长,得票最高者当选。但由于投票机制不健全,导致每届投票时,候选人在投票系统的识别码类型不一致。请编写函数模板,能针对多种类型的数据,查找出得票最高的元素。其中,每届投票的选票有n张,识别码类型为T
注意:必须使用模板函数
输入:
3
I 10
5 3 5 2 9 7 3 7 2 3
C 8
a b a e b e e q
S 5
sandy david eason cindy cindy
输出:
3 3
e 3
cindy 2
代码实现:算法在findMax函数实现
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
template <class T>
void findMax(T* arr,int len){
	int j;
	for(j=0;j<len;++j)
		cin>>arr[j];
	sort(arr,arr+len);
	int times=0 ,tem_times=1;
	T elem=arr[0] ;
	for(j = 1;j<len;++j)
		if(arr[j]==arr[j-1])
			tem_times++;
		else{
			if(tem_times>times){
				times = tem_times;
				elem = arr[j-1];
			}
			tem_times = 1;
		}
	if(tem_times>times){
		elem = arr[len-1];
		times = tem_times;
	}
	cout<<elem<<" "<<times<<endl;
}
int main(){
	int t,num;
	cin>>t;
	char type;
	while(t--){
		cin>>type;
		cin>>num;
		if(type=='I'){
			int *arr = new int [num];
			findMax(arr,num);
		}
		else if(type=='S'){
			string *arr = new string [num];
			findMax(arr,num);
		}
		else if(type=='D'){
			double *arr = new double [num];
			findMax(arr,num);
		}
		else{
			char *arr = new char [num];
			findMax(arr,num);
		}
	}
	return 0;
}
欢迎进一步交流本博文相关内容:
博客园地址 : http://www.cnblogs.com/AsuraDong/
CSDN地址 : http://blog.csdn.net/asuradong
也可以致信进行交流 : xiaochiyijiu@163.com
欢迎转载 , 但请指明出处 : )
C++数组查重的更多相关文章
- Javascript中数组查重的方法总结大全
		数组查重:简单点说,就是找出数组中重复的元素然后去除,最后得到一个没有重复元素的数组. // 方法一思路: 1.构建一个新的数组,用于存放结果. 2.for循环中每次从数组取出一个 ... 
- javascript数组查重方法总结
		文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ... 
- js查重去重性能优化心得
		概述 今天产品反映有个5000条数据的页面的保存按钮很慢,查看代码看到是因为点击保存按钮之后,进行了查重操作,而查重操作是用2个for循环完成了,时间复杂度是O(n^2).没办法,只能想办法优化一下了 ... 
- 如何对excel进行列查重
		学习了excel函数:countif.表达式:COUNTIF(数据区域,条件),作用:对数据区域内符合条件单元格计数 具体应用 在“姓名”(列A)后插入一列(列B),在B2单元格输入公式“=IF(CO ... 
- Javascript:面试经典套路-查重(reduce)
		今天在偶然间查看到了一段代码,代码使用了很短的篇幅完成了字符串统计相同字符次数这个经典面试题,其中用到了reduce这个方法,网上查了查,没有查到什么有价值的东西,导致浪费了我一些时间才看懂,现将我的 ... 
- c++ 查重+排序函数
		输入 第一行n.第二行有n个元素. 输出 查重排序后的元素 样例: 输入: 5 1 1 2 3 4 输出: 1 2 3 4 unique的作用是“去掉”容器中相邻元素的重复元素 注意:用unique只 ... 
- 论文 查重 知网 万方 paperpass
		相信各个即将毕业的学生或在岗需要评职称.发论文的职场人士,论文检测都是必不可少的一道程序.面对市场上五花八门的检测软件,到底该如何选择?选择查重后到底该如何修改?现在就做一个知识的普及.其中对于中国的 ... 
- ES6-set &&  数组剔重
		set Set:ES6中提供的新的数据结构set.特点:1.类似数组,属性值时唯一的!!2.Set本身是一个构造函数,用来生成数据结构,表现形式{1,"3",78},是个数据集合 ... 
- POJ 3274 Gold Balanced Lineup  哈希,查重 难度:3
		Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been able to narrow ... 
随机推荐
- Office 修改语言
- ubuntu系统jdk安装及环境变量配置
			一.安装jdk 1.下载linux版本jdk,我用的是最新版本1.8.0_102 2.打开终端,进入jdk的存放路径 3.解压.tar.gz文件 sudo tar zxvf jdk-8u102-lin ... 
- ognl表达式注意事项
			1.在jsp页面中: <s:a action="departmentAction_delete.action?did="></s:a> 说明: 1.st ... 
- thinkphp结合云之讯做短信验证码
			thinkphp结合云之讯做短信验证码先去云之讯注册账号 网址http://www.ucpaas.com/ 注册云之讯平台账号,即可免费获得10元测试费用测试够用啦 解压附件到 ThinkPHP\Li ... 
- zhw大神线段树姿势
			; i<; i++) tree[i][]=tree[i][]=i; ; i>=; i--) tree[i][]=tree[i+i][], tree[i][]=tree[i+i+][]; v ... 
- [Swift通天遁地]四、网络和线程-(7)检测服务器接口的访问状态:验证请求结果和可访问性
			★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ... 
- Vue使用html2canvas将页面转化为图片
			需求是微信端将页面截屏之后保存到本地,使用了html2canvas插件 先引入插件 npm install --save html2canvas 之后在你所需要使用的页面引入 import html2 ... 
- 小HY的四元组
			4.7 比赛T1,然而这题爆零了 其实很简单的...其实哈希都不用 所以首先记录每组的差值,按其sort一下再暴力找即可 #include<cstdio> #include<iost ... 
- 开始玩qt,使用代码修改设计模式生成的菜单
			之前制作菜单时,不是纯代码便是用设计模式 直接图形化完成. 今天我就是想用代码修改已经存在的菜单项,如果是用代码生成的可以直接调用指针完成: 但通过设计模式完成的没有暴露指针给我,至少我没发现. 在几 ... 
- Java—将文件压缩为zip文件
			import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ... 
