杭电OJ BestCoder28期1001Missing number问题(小技巧偏移法)
1.先描述一下问题: 小yb有一个排列,但他不小心弄丢了其中的两个数字。现在他告诉你他现在手上还有哪些数字,需要你告诉他他丢了哪两个数字。
有多组数据,第一行为数据组数T(T≤10)。
对于每组数据,第一行为一个正整数n,表示yb现在手上有的数字个数。
在接下来一行有n个整数,保证所有数字互不相同且合法。
1≤n≤1,000
对于每组数据,输出两个数字,为排列缺少的两个数字,小的在前。 2.解题思路 该问题可以用一个数组存储输入排列,然后用一个偏移指针处理每次输入数据移动的情况。(为了处理出现 1 3 这种序列的情况,需要在输入数据的末尾加入一个0)
具体的移动情况如下图所示:
3.代码如下
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 1000 + 10
int main()
{
int i,j,num_case,num_number,number[MAX_NUM];
int offset = 0,count = 0; //偏移
scanf("%d",&num_case);
for( i = 1; i <= num_case; i++)
{
offset = 0;
count = 0;
scanf("%d",&num_number);
for( j = 0; j < num_number; j++)
{
scanf("%d",&number[j]);
}
number[j] = 0; //处理当出现 1 3 这种排列的状况而使offset偏移溢出
for( j = 0; j < num_number + 2; j++)
{
if(count >= 2)
{
break;
}
if( number[offset] == j + 1 )
{
offset++;
}
else
{
printf("%d ",j + 1);
count++;
}
}
printf("\n");
}
}
最新文章
- 基于Unity3D 的Vuforia SDK开发基础教程
- block的常见用法
- JQ判断屏幕宽度
- <;Java中的继承和组合之间的联系和区别>;
- (转)神经网络和深度学习简史(第一部分):从感知机到BP算法
- mysql oom之后的page 447 log sequence number 292344272 is in the future
- Hibernate控制insert\update语句
- vue渲染数据后与owlCarousel轮播插件冲突,失效
- iOS开发者学习Flutter
- 008_tcp探测
- 遇到一个json解码失败的问题
- 《算法导论》——矩阵乘法的Strassen算法
- Eclipse插件的安装(手动安装),以安装SVN插件和中文语言包为例
- fasttext与Linear SVC 分类测试结果
- 第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承
- Linux基础命令---last
- 【LeetCode】Pascal&#39;s Triangle II (杨辉三角)
- RocketMQ runbroker.sh 分析JVM启动参数
- CSP201612-2:工资计算
- 全面的framebuffer详解一
热门文章
- 移动端播放直播流(video.js 播放 m3u8 流)
- [LeetCode] 168. Excel Sheet Column Title 求Excel表列名称
- 一文读懂ZooKeeper (转)
- ansible的基础使用(一)
- vxlan 跨网段虚拟机迁移
- 【转帖】处理器史话 | 当Power架构的发展之路遭遇“滑铁卢”
- SQL——BETWEEN操作符
- python基础 — Selenium 详细介绍
- Android--Bitmap处理、圆角、圆形
- Pycharm下直接升级库所遇到的&#39;main&#39;问题