OJ2236“孤单数”题目报告
题目描述:有2n+1个数,其中有n对数字是成双出现的,有且仅有1个数字只有它自己一个。请你找出这个孤单数。
输入描述:
第一行有且只有一个正整数n(n<=500000)
第二行有2n+1个数ai(-10^9<=ai<=10^9)
输出描述:
有且只有一个数,输出这个孤单数。
样本输入:
3
6 2 6 3 7 7 3
样本输出:
2
#include <iostream>
#include <cstdio>
#include <algorithm>
int a[500001];
using namespace std;
int main(void)
{
int i,m,num,last,n,flag = 0;
scanf ("%d",&n);
for (i = 0; i < 2 * n + 1; i++)
{
scanf ("%d",&a[i]);
}
sort(a, a + 2 * n + 1);
num = 0;
m = a[0];
for (i = 0; i < 2 * n;i++)//先在前2n个数字中寻找孤单数
{
if(a[i] == m)
{
num++;//每个不是孤单数的数字必定有两个
if(num == 2)//当同一种数字有两个时,证明该数字不是要寻找的数字,于是从下一种数字开始寻找
{
num = 0;//下一种数字数量清零
m = a[i + 1];//将中间变量的值定义为下一种数字
}
}
else//当一种数字第一次出现的数字的后一个数字与其不相等时,证明该数字是孤单数
{
flag = 1;//将标记赋值为1
last = a[i - 1];//孤单数为上一个数字
break;//退出循环
}
}
if(!flag)//当标记为0,也就是没有在前2n个数字中找到孤单数时,证明最后一个数字为孤单数
{
last = a[i];
}
printf ("%d\n",last);//输出孤单数
return 0;
}
小结:从这到题目可以看到排序的巧妙使用,这道类似于寻找单身狗的题目可以利用排序,找到单身狗,同时,标记也发挥了很大的作用~~
解法2:
上面这种我第一个想到的算法并不是最优的算法,因为开了一个很大的数组,也十分地占用内存。其实这道题最优的算法应该是用逻辑符号异或,因为0与任何数的异或都是这个数本身,而两个相同的数字的异或又等于0,在本题中,那2n个不是单身狗的数字的异或一定等于0,因此,这2n+1个数字的异或必定等于那个单身狗。不论是从时间还是空间上,算法都比第一种要好得多,时间复杂度也有原来的O(2n)减少成了O(n)。
代码:
#include <stdio.h>
int main(void)
{
int a,n,i,num = 0;
scanf ("%d",&n);
for (i = 0; i < 2 * n + 1; i++)
{
scanf ("%d",&a);
num ^= a;
}
printf ("%d\n",num);
return 0;
}
OJ2236“孤单数”题目报告的更多相关文章
- 【九度OJ】题目1074:对称平方数 解题报告
[九度OJ]题目1074:对称平方数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1074 题目描述: 打印所有不超过n( ...
- 【九度OJ】题目1183:守形数 解题报告
[九度OJ]题目1183:守形数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1183 题目描述: 守形数是这样一种整数, ...
- 【剑指Offer】孩子们的游戏(圆圈中最后剩下的数) 解题报告(Python)
[剑指Offer]孩子们的游戏(圆圈中最后剩下的数) 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-in ...
- 【剑指Offer】丑数 解题报告
[剑指Offer]丑数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: ...
- 【剑指Offer】把数组排成最小的数 解题报告(Python)
[剑指Offer]把数组排成最小的数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 比赛--找丢失的数--解题报告T
找丢失的数 题目大意: There is a permutation without two numbers in it, and now you know what numbers the perm ...
- 「SDOI2014」数数 解题报告
「SDOI2014」数数 题目描述 我们称一个正整数 \(N\) 是幸运数,当且仅当它的十进制表示中不包含数字串集合 \(S\) 中任意一个元素作为其子串. 例如当 \(S=(\)22, 333, 0 ...
- 洛谷 P1430 序列取数 解题报告
P1430 序列取数 题目描述 给定一个长为\(n\)的整数序列\((n<=1000)\),由\(A\)和\(B\)轮流取数(\(A\)先取).每个人可从序列的左端或右端取若干个数(至少一个), ...
- 洛谷 P2022 有趣的数 解题报告
P2022 有趣的数 题目描述 让我们来考虑1到N的正整数集合.让我们把集合中的元素按照字典序排列,例如当N=11时,其顺序应该为:1,10,11,2,3,4,5,6,7,8,9. 定义K在N个数中的 ...
随机推荐
- JSP servlet的配置与使用
1. servlet 的配置文件内容如下所示 <servlet> <description>This is the description of my J2EE com ...
- textView布局的一点体会
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 关于微信分享JSSDK使用需注意的几点问题
微信公众平台技术文档中有微信JS-SDK说明文档,详情见地址https://mp.weixin.qq.com/wiki 官方给出了使用步骤和DEMO,下面说一下几点需要注意的问题. 1.登录微信公众平 ...
- React介绍(讲人话)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 21.0px "PingFang SC"; color: #616161 } span. ...
- nodeJS之路径PATH模块
前面的话 path模块包含一系列处理和转换文件路径的工具集,通过 require('path') 可用来访问这个模块.本文将详细介绍path模块 路径组成 [path.dirname(p)] 返回路径 ...
- VR全景智慧城市:360全景市场需要背景及其优势~
VR元年已过,VR项目.VR创业潮转为理性,VR行业分为两个方向:硬件和内容. VR全景,又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体大的区别是"可操作,可交 ...
- Java中设计模式之生产者消费者模式-4
引言 生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区.其中一个是生产者,用于将消息放入缓冲区:另 ...
- Python爬知乎妹子都爱取啥名
闲来无事上知乎,看到好多妹子,于是抓取一波. 有没有兴趣?? 目标网址https://www.zhihu.com/collection/78172986 抓取分析 爬取分析 使用pandas操作文件 ...
- 编写一个简单的Web Server
编写一个简单的Web Server其实是轻而易举的.如果我们只是想托管一些HTML页面,我们可以这么实现: 在VS2013中创建一个C# 控制台程序 编写一个字符串扩展方法类,主要用于在URL中截取文 ...
- VirtualBox的快照功能
VirtualBox是非常好用的一个虚拟机软件,无论是性能还是易用性不比商用的Vmware差.VirtualBox最初是Sun公司的产品,由于Sun被Oracle收购,现在也归Oracle了.除了虚拟 ...