某次科研调查时得到了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 统计数字)的更多相关文章

  1. 洛谷 P1097 统计数字

    P1097 统计数字 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自 ...

  2. java算法:统计数字-将数字转换成字符串,然后使用字符串String.valueOf()方法进行判断

    题目: 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值. 样例 样例 1: 输入: k = 1, n = 1 输出: 1 解释: 在 [0, 1] 中,我们发现 1 出现了 ...

  3. 每日一练之贪心算法(P2587)

    洛谷——P2587 [ZJOI2008]泡泡堂 两队人马进行比赛, 战斗力值各有差异, 如果一方获胜得两分,战平各得一分,失败不得分,求可取得的最佳战绩与最差战绩. 思路:1)最强的打得过最强的就直接 ...

  4. P1097 统计数字

    P1097题库链接:https://www.luogu.org/problem/P1097 难度:普及- 算法标签:模拟,排序,概率论 1.桶模拟 O(n) 得分20 由于题目让统计数出现的次数,并按 ...

  5. [NOIP2007] 提高组 洛谷P1097 统计数字

    题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出 ...

  6. 洛谷—— P1097 统计数字

    https://www.luogu.org/problem/show?pid=1097 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数 ...

  7. C++算法代码——统计数字

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1109 题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000( ...

  8. 每日一小练——高速Fibonacci数算法

    上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...

  9. 【每日算法】排序算法总结(复杂度&amp;稳定性)

    一.插入排序:稳定,时间复杂度O(n^2) 想象你在打扑克牌,一開始左手是空的,接着右手開始从桌上摸牌,并将其插入到左手的一把牌中的正确位置上.为了找到这个正确位置,我们须要从右到左将它与手中的牌比較 ...

随机推荐

  1. WMware Vsphere取消某虚机的漂移

    由于一些业务特性,有一些虚机不应该完全受集群DSR控制.下面记录一下如何更改某一虚机的漂移属性. 1.环境 VMware Vsphere web client 6.5 2.点击需要配置虚机所在的集群, ...

  2. 16路PWM输出的pca9685模块

    今天要介绍的就是该模块,该模块是16路pwm模块,使用I2C总线可以控制16路舵机(led). 接线OE空着就可以,其他VCC是芯片供电+5,SCL时钟线,SDA信号线,GND地线. 芯片介绍可以看: ...

  3. 18.18 Datasheet Note

    18.18.1 DM9000A datasheet Ethernet Controller with General Processor Interface Ethernet interface pr ...

  4. ORACLE数据库在导入导出时序列不一致的问题

    ORACLE数据库在导入导出时序列不一致的问题   在使用ORACLE数据库时,当给一个表设置自增字段时,我们经常会使用到序列+触发器来完成.但当你需要对数据库进行导入导出时,序列很容易出问题. 当你 ...

  5. 学习Python3 试了一下百度OCR和腾讯OCR

    因为有个小功能,需要用一下OCR,所以先找了2家,百度和腾讯,如何开通,如何创建应用获得key等不作说明了 百度的比较简单,引用一个AipOcr全部搞定,代码如下: from aip import A ...

  6. Eureka入门案例

    1.整体思路 1.1.服务注册中心Eureka(可以是一个集群,对外暴露自己的地址) 1.2.服务提供者:启动后向Eureka注册自己的信息(地址,提供什么服务) 1.3.客户端消费者:向Eureka ...

  7. sql server 2005中的分区函数用法(partition by 字段)

    分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系统中取出每个学科前3名的学生.这种查询在SQL Server 2005之前,写起来很繁琐,需要用到临时表关联查询才能取到.SQL Serve ...

  8. Python3学习的准备工作

    简单好用的桌面开发平台:ubuntu 16.x/18.x 或 LinuxMint 18.x 开发工具:新版操作系统都自带有Python3.5及更高版本 其实作为初学者,不要迷信版本,也不必着急升级成最 ...

  9. ArcGIS紧凑型缓存存储格式分析

    by 蔡建良 2018-8-24 网络中我看到的网文将bundle存储切片数据的方式都没说清或是说错.按照错误方法一样可以在桌面浏览,但在arcgis for android却无法浏览. bundlx ...

  10. GPRS骨干网逻辑结构

    从逻辑上来说,GPRS通过在GSM网络结构中增添SGSN和GGSN两个新的网络节点来实现.由于增加了这两个网络节点,需要命名新的接口.图1说明了GPRS逻辑体系结构.表1给出了GPRS体系结构中的接口 ...