博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
13:整数去重(1.9)
阅读量:5963 次
发布时间:2019-06-19

本文共 1674 字,大约阅读时间需要 5 分钟。

分析:

方法1:先使用数组a记录,然后使用双重循环逐个比较,把不重复的数值记录到b中。时间复杂度O(n^2)(n=10000)超时;

方法2:先使用数组a记录,然后对数组进行排序。再扫描一遍a,将不重复的数值记录在b数组.

 STL里面有个sort函数,sort 可以对给定区间所有元素进行排序,默认的排序方式是升序。
但使用这个函数,需要包含头文件<algorithm>和
using
namespace std;
 使用方法举例:
int a[1000],要对从a[0]到a[49]的元素进行排序,只要写sort(a,a+50)就行了。

 (    sort函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间的尾地址的下一地址。)

#include
#include
#include
using namespace std;int a[21000],b[21000];int main(){ int x,y,n,maxn=-1,num=1,t=0; scanf("%d",&n); for(int i=0;i<=n-1;i++) scanf("%d",&a[i]); sort(a,a+n); b[0]=a[0]; for(int i=1;i
View Code

方法3:可以不排序吗?

v先使用数组a记录,然后使用双重循环逐个比较,把不重复的数值记录到b中。时间复杂度O(n^2)(n=10000)超时;
 或者
v使用标记数组f,如果数值x,出现则f[x]=1.
v边读入边处理,使用b数组记录没有重复出现的数值。
v     读入x,如果f[x]!=1,则b[t]=x
vt为当前读入的数值中,不同的数值个数即b数组的下标。
v
 
#include
int f[21000]={
0},b[21000];int main(){ int n; scanf("%d",&n); int x,t=0; for(int i=1;i<=n;i++) { scanf("%d",&x); if (!f[x]){
//判断x是否出现过,没出现过则记录同时存储 f[x]=1;//记录x出现过 t++;//b数组的下标 b[t]=x; } } for(int i=1;i<=t-1;i++) printf("%d ",b[i]); printf("%d\n",b[t]); return 0;}
View Code

 

 

思考:不使用数组可以吗?

//边读入边处理,用c数组记录每个数x是否出现过,如果第一次出现直接输出llh版本#include
#include
using namespace std;int c[20005];int main(){ int n,i,x; cin>>n; for(i=0;i
>x; if(c[x]==0)//如果x第一次出现直接输出,同时c[x]标志1 { cout<
<<' '; c[x]=1; } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/ssfzmfy/p/5198955.html

你可能感兴趣的文章
英国政府可能利用曼彻斯特自杀袭击要求互联网公司破解加密
查看>>
Mozilla 将大幅简化火狐浏览器的同步操作
查看>>
微软加大在 Edge/IE 浏览器上阻止 SHA-1 证书的力度
查看>>
龙芯将两款 CPU 核开源,这意味着什么?
查看>>
《51单片机应用开发从入门到精通》——导读
查看>>
PostgreSQL 锁解密
查看>>
snoopy 模拟表单提交(1)
查看>>
从软件技术演变到软件项目管理的进步
查看>>
云数据库与传统数据库有什么区别
查看>>
【Python之旅】第七篇(二):Redis使用基础
查看>>
编译可在Android上运行的依赖库(四):llibiconv库
查看>>
数据结构——树形结构的应用
查看>>
IIS服务中五种身份验证的灵活运用-转
查看>>
使用TFHpple解析html
查看>>
判定点是否在不规则多边形内部的问题
查看>>
【Linux】嵌入式开发,在Linux中使用C语言对标准I/O库文件的替换Copy
查看>>
[翻译] ZCSHoldProgress
查看>>
大数据应用电子商务之精准推广
查看>>
iOS开发Swift篇—(二)变量和常量
查看>>
ORACLE绑定变量隐式转换导致性能问题
查看>>