Duplicate Pair
An
array of length n, with address from 1 to n inclusive, contains entries
from the set {1,2,...,n-1} and there's exactly two elements with the
same value. Your task is to find out the value.
Input
Input contains several cases.
Each case includes a number n (1<n<=10^6), which is followed by n integers.
The input is ended up with the end of file.
Output
Your must output the value for each case, one per line.
Sample Input
2
1 1
4
1 2 3 2
Sample Output
1
2
import java.io.*;
public class DuplicatePair {
public static void main(String[] args){
File file = new File("D:\\arithmetic\\src\\duplicatePair.txt");
if(!file.exists()){
System.out.println("file is not exist!");
return;
}
FileReader fileReader = null;
BufferedReader reader = null;
try {
fileReader = new FileReader(file);
reader = new BufferedReader(fileReader);
int n = Integer.valueOf(reader.readLine());
while(n != -1){
int[] arr = new int[n/8+1];
for(int i=0;i<n/8+1;i++)
arr[i] = 0;
String str = reader.readLine();
String[] nums = str.split(" ");
for(int i=0;i<nums.length;i++){
int temp = Integer.valueOf(nums[i]);
if(((1<<temp) & arr[temp/8]) == 0){
arr[temp/8] |= 1<<temp;
}else{
System.out.println(temp);
}
}
String strs = reader.readLine();
if(strs != null){
n = Integer.valueOf(strs);
}else{
n = -1;
}
}
reader.close();
fileReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
算法分析:
看到这个题目也许你觉得很简单,只要根据n的大小创建一个数组,然后扫描各个整数,将该数对应的数组置为1。可是题目里的n是10^6级别,即使这样的开销也不小。
最好的办法就是用每一个二进制位标记一个数字。每读取一个数的时候都先检查下对应的二进制是否为1,如果是就输出当前数。否则将对应的位置1,继续读取下一个数字。
分享到:
相关推荐
### ORACLE RMAN DUPLICATE 数据库复制详解 #### 概述 在Oracle环境中,通过RMAN(Recovery Manager)工具可以高效地复制整个数据库。本文将详细介绍如何利用RMAN的`DUPLICATE`命令来实现数据库的复制,并针对两种...
Duplicate File Cleaner是一款功能强大的重复文件清理工具,它能够帮助用户扫描并识别计算机上所有重复的文件,从而节省磁盘空间,提升系统性能。 ### 软件概述 Duplicate File Cleaner的主要功能包括但不限于: ...
“Duplicate Net Names Wire”错误是 Altium Designer 用户经常遇到的一个问题,通过理解网络标识符作用范围的不同设置方式及其对电路设计的影响,我们可以采取有效的措施来避免或解决这类问题。合理利用 Flat、...
FirmTools Duplicate Photo Finder是一款整理图像的必备工具,它使用高级搜索算法,会快速在您的硬盘或指定文件夹中找到重复或相似的图像,需要的朋友快来下载吧。 FirmTools Duplicate PhotoFinder 使用了先进的...
Outlook Duplicate Items Remover是一款专为Microsoft Outlook设计的工具,旨在帮助用户解决电子邮件、联系人、日历项、任务和笔记等重复数据的问题。在Outlook中,由于各种原因(如手动复制、同步错误或软件故障)...
FirmTools Duplicate Photo Finder 相似图像查询软件 你电脑中如果有很多图像,有很多可能是一个logo只差,你用其他md5检测软件是不能快速找出来的。这个软件可以搜索相似的图像,你查看后选择删除,非常的方便。 ...
duplicate cleaner pro 破解版 4.0.5 。安装后,将第二步的x86及x64目录下的文件拷贝到安装目录下的x86与x64下。然后启动,输入长一点的序列号(随便输入字符),即可破解。
"Duplicate Cleaner Pro"就是这样一款专为解决此问题而设计的专业软件,它以其强大的功能和易用性,成为了许多用户的选择。 Duplicate Cleaner Pro 提供了多种条件的文件查询功能,这使得用户可以根据自己的需求...
Oracle 11gR2 使用 RMAN duplicate from active database 复制数据库 Oracle 11gR2 中使用 RMAN duplicate from active database 复制数据库是一种高效的数据库复制方法。这种方法可以直接从活动数据库复制,省去...
Duplicate File Finder单文件
“quora_duplicate_questions”数据集是Quora官方首次对外公开的一个大规模语料库,主要用于训练和评估模型来判断两个问题是否具有相同的含义。它包含了约400,000对问题,每对问题由两部分组成:一个是原始问题,另...
【Duplicate Cleaner v2.04】是一款高效实用的免费软件,专为用户解决电脑中重复文件堆积的问题。这款工具能够帮助用户快速扫描、识别并删除重复的文件,从而释放宝贵的磁盘空间,优化电脑性能。 在当今数字时代,...
Duplicate cleaner pro v3.2.7crack
### Oracle DataGuard 环境搭建详解:使用Duplicate方法 #### 一、Oracle DataGuard简介与应用场景 Oracle DataGuard是一种高可用性和灾难恢复解决方案,它能够保护数据免受逻辑和物理故障的影响。DataGuard通过...
### Oracle RMAN DUPLICATE 教程详解 #### 一、RMAN Duplicate 概述 **RMAN (Recovery Manager)** 是 Oracle 数据库管理系统中的一个重要工具,用于管理数据库的备份、恢复以及灾难恢复策略。其中,**Duplicate** ...
为了有效地解决这个问题,"Alike Duplicate Image Finder 2.2 绿色版"应运而生,它是一款专为用户设计的高效、便捷的重复图片查找工具。 首先,我们来了解一下"Alike"的核心功能。该软件的主要目标是帮助用户快速...
Extended Duplicate则为这些问题提供了解决方案。 首先,该插件允许用户在复制对象时保留其原有的父层级关系,这意味着你可以快速创建一系列关联的对象,如骨骼系统、模拟群组等,而无需手动重新设置每个副本的父子...
面对众多的重复邮件,如何可以快速地删除重复邮件,Outlook Duplicate Items Remover ,快速,简单
Duplicate Cleaner Pro 5.19.0.0_中文直装版文件查重神器
以下是使用RMAN通过`duplicate`命令创建备用数据库的详细步骤和知识点: 1. **环境准备**: 在进行任何操作之前,确认主数据库处于归档模式。如描述中所示,可以通过`archive log list`命令查看数据库是否已启用...