每日一练之排序算法(P1097 统计数字)
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5×10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
采用sort直接排序,直接略过排序门槛;
- //P1097 统计数字
- #include<iostream>
- #include<algorithm>
- using namespace std;
- //const int MAX=200001;
- int main()
- {
- int i,n,count;
- cin>>n;
- int *a=new int[n];
- for(i=;i<n;i++) cin>>a[i];
- sort(a,a+n);
- for(i=;i<n;i++)
- {
- count=;
- cout<<a[i]<<" ";
- while(a[i+]==a[i]) //如果后一位数相同,则统计叠加,否则输出统计结果
- {
- count++;i++;
- }
- cout<<count<<endl;
- }
- delete []a;
- return ;
- }
注:sort(start,end+1,排序方法),start为排序起始地址,而end+1是指实际上是最后一个排序地址的下一个地址(为什么要+1呢?因为这样的设计是整个stl的设计原则决定的,STL的容器在传递迭代器参数时都是传递容器的开始位置,以及容器结尾的下一位置);排序方法默认升序,也可重写,注意返回bool型或int型。
补上快排与堆排序的代码:
- void QuickSort(int a[],int left,int right)
- {
- if(left<right)
- {
- int i=Division(a,left,right);
- QuickSort(a,left,i-);
- QuickSort(a,i+,right);
- }
- }
- int Division(int a[],int left,int right) //常用的找分界点方法
- {
- int temp=a[left];
- while(left<right)
- {
- while(left<right&&a[right]>=temp) right--;
- a[left]=a[right];
- while(left<right&&a[left]<=temp) left++;
- a[right]=a[left];
- }
- a[left]=temp;
- return left;
- }
- int Division(int a[],int left,int right) //另一种方式,通过将小于等于基准值的数全部集中到基准点左侧,count值即为最终基准值所在序号
- {
- int t,temp=a[left];
- int count=left;
- for(int i=left+;i<=right;i++)
- {
- if(a[i]<=temp)
- {
- count++;
- t=a[i];
- a[i]=a[count];
- a[count]=t;
- }
- }
- t=a[left];
- a[left]=a[count];
- a[count]=t;
- return count;
- }
- ////////堆排
- void HeapSort(int a[],int n)
- {
- for(int i=n/-;i>=;i--) HeapAdjust(a,i,n);
- for(int i=n-;i>;i--)
- {
- int t=a[];
- a[]=a[i];
- a[i]=t;
- HeapAdjust(a,,i);
- }
- }
- void HeapAdjust(int a[],int s,int n)
- {
- int j,temp;
- while(*s+<n)
- {
- j=*s+;
- if((j+<n)&&(a[j+]>a[j])) j++;
- if(a[s]<a[j])
- {
- temp=a[s];
- a[s]=a[j];
- a[j]=temp;
- s=j;
- }
- else break;
- }
- }
最简短做法是使用map与set, 一个统计数,一个统计值;
- //#include<bits/stdc++.h>
- #include<iostream>
- #include<map>
- #include<set>
- using namespace std;
- int main() {
- map <int,int> num;
- set <int> a;
- int n,i,q;
- cin>>n;
- for(i=; i<=n; i++) {
- cin>>q;
- num[q]++;
- a.insert(q);
- }
- for(set<int>::iterator it=a.begin(); it!=a.end(); it++)
- cout<<*it<<" "<<num[*it]<<endl;
- }
每日一练之排序算法(P1097 统计数字)的更多相关文章
- 洛谷 P1097 统计数字
P1097 统计数字 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自 ...
- java算法:统计数字-将数字转换成字符串,然后使用字符串String.valueOf()方法进行判断
题目: 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值. 样例 样例 1: 输入: k = 1, n = 1 输出: 1 解释: 在 [0, 1] 中,我们发现 1 出现了 ...
- 每日一练之贪心算法(P2587)
洛谷——P2587 [ZJOI2008]泡泡堂 两队人马进行比赛, 战斗力值各有差异, 如果一方获胜得两分,战平各得一分,失败不得分,求可取得的最佳战绩与最差战绩. 思路:1)最强的打得过最强的就直接 ...
- P1097 统计数字
P1097题库链接:https://www.luogu.org/problem/P1097 难度:普及- 算法标签:模拟,排序,概率论 1.桶模拟 O(n) 得分20 由于题目让统计数出现的次数,并按 ...
- [NOIP2007] 提高组 洛谷P1097 统计数字
题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出 ...
- 洛谷—— P1097 统计数字
https://www.luogu.org/problem/show?pid=1097 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数 ...
- C++算法代码——统计数字
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1109 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000( ...
- 每日一小练——高速Fibonacci数算法
上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...
- 【每日算法】排序算法总结(复杂度&稳定性)
一.插入排序:稳定,时间复杂度O(n^2) 想象你在打扑克牌,一開始左手是空的,接着右手開始从桌上摸牌,并将其插入到左手的一把牌中的正确位置上.为了找到这个正确位置,我们须要从右到左将它与手中的牌比較 ...
随机推荐
- mysql的基础用法,水一下
#和上一篇是一起的,上一篇就是为这个做insert <blockquote>/*思考题*/ create database spj; use spj;create table s( sno ...
- Linux下的常用文本编辑器
Linux的文本编辑器 ed 在早期的unix平台上,ed可以说是唯一的编辑工具.它是一个很古老的行编辑器,vi这些编辑器都是从ed 演化而来.行编辑器使用起来很不方便,每次只能对一行进行操作,.而后 ...
- 2018-2019-2 网络对抗技术 20165308 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165308 Exp1 PC平台逆向破解 NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP汇编指令:执行到NOP指令时,CPU仅仅当做一个 ...
- JIT(Just in time,即时编译,边运行边编译)、AOT(Ahead Of Time,运行前编译),是两种程序的编译方式
JIT(Just in time,即时编译,边运行边编译).AOT(Ahead Of Time,运行前编译),是两种程序的编译方式
- windows的github教程
如何向github提交变更1. 在github上面创建project,获得git地址:2. 来到windows,首先安装git:3. 在目标目录下:git clone https://github.c ...
- DevExpress Grid使用checkBox选中的方法
到官网得到消息自13.2版本后的Dev Grid中均内置了CheckBox列多选功能.在寻找答案的过程的成果进行记录. 一.13.2版本以后用法 启用多选列 对Gird中的View进行以下属性设置: ...
- maven:Fatal error compiling: 无效的目标 发行版: 1.8 -> [Help 1]
https://blog.csdn.net/kkgbn/article/details/72777750
- Creating Excel files with Python and XlsxWriter——Introduction
XlsxWriter 是用来写Excel2007版本以上的xlsx文件的Python模块. XlsxWriter 在供选择的可以写Excel的Python模块中有自己的优缺点. #---------- ...
- JRockit检测Tomcat内存溢出JAVA内存泄漏问题
http://blog.csdn.net/liyanhui1001/article/details/8240473 公司的一个Java应用系统上线以来,基本每1天OutOfMemoryError: P ...
- Java Swing 界面中文乱码问题解决(Idea环境)
编译(build)的时候和运行的时候使用同样的字符集就可以了.这里,我都设置为“UTF-8”.具体做当如下: File->Settings->Build...->Compiler,在 ...