7-3 sdut-array1-1-有重复的数据(II) (20 分)

7-3 sdut-array1-1-有重复的数据(II) (20 分)

在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。 你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。

输入格式:

你的程序首先会读到一个正整数n,1<=n<=100000。然后是n个整数。

输出格式:

如果这些整数中存在重复的,就输出:YES;否则,就输出:NO。

输入样例:

5

1 2 3 1 4

输出样例:

YES

代码


import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int[] arr = new int[1000001];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = 0;
		}
		for (int i = 0; i < n; i++) {
			int m = scanner.nextInt();
			arr[m]++;
		}
		int fg = 0;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] > 1) {
				fg++;
				System.out.println("YES");
				break;
			}
		}
		if (fg == 0) {
			System.out.println("NO");
		}
	}
}

### 回答1: 这个问题需要在一大堆数据中找出重复的是一件经常要事情。现在,我们要处理许多整数,在这些整数中,可能存在重复数据。你要一个程序这件事情读入数据,检查是否有重复数据。如果有,就去掉所有重复的数字。最后。 ### 回答2: 你需要输出所有不重复的数字,按照输入顺序排列。 为了解决这个问题,我们可以使用哈希表或者集合。哈希表是一种关联数组,用于存储键值对,并且可以根据键值快速查找对应的值。集合是一种无序且元素不重复数据结构。 我们可以先创建一个空的哈希表或者集合,然后逐个读入数字。每次读入一个数字,我们先在哈希表或者集合中查找该数字是否已经存在。如果存在,则表示这个数字是重复的,直接跳过。如果不存在,则将该数字加入到哈希表或者集合中。 在处理完所有数据之后,我们就得到了所有不重复的数字。如果使用哈希表,则需要将哈希表中所有键值对的键取出来,按照输入顺序排列后输出。如果使用集合,则直接将集合转换成列表,并按照输入顺序输出即可。 示例代码(使用集合): ``` nums = set() while True: try: num = int(input()) if num not in nums: nums.add(num) except: break for num in nums: print(num) ``` 该程序会不断读入整数,直到输入结束(比如按下 Ctrl+D),然后输出所有不重复的整数。 总之,找出重复数据是一件常见的问题,可以使用哈希表或者集合来解决。这些数据结构可以快速查找元素,并且可以避免重复数据的问题。 ### 回答3: 输出剩下的数字。这个问题可以采用多种解决方法,下面我将介绍两种方案。 方案一:使用哈希表 哈希表是一种以键值对形式存储数据数据结构,它允许快速查找数据。在这个问题中,我们可以借助哈希表来记录已经出现过的数字。具体法如下: 1. 读入一个数据,将其放入哈希表中; 2. 依次读入后面的数据,对于每个数据,先检查哈希表中是否已经存在该数字,如果是,说明出现了重复数据,将它从哈希表中删除;如果不是,将其加入哈希表中; 3. 遍历完所有数据后,哈希表中剩下的数字就是没有重复的数字。 方案二:排序+去重 对于一组数据,如果将它们排序,那么相同的数字一定会被排在相邻位置。因此,我们可以先对数据进行排序,然后依次检查相邻的数字是否相同,如果是,说明出现了重复数据,将其删除。具体法如下: 1. 读入数据并进行排序; 2. 依次检查相邻的数字是否相同,如果是,说明出现了重复数据,将它删除; 3. 遍历完所有数据后,剩下的数字就是没有重复的数字。 总结 以上是两种解决重复数字问题的方法,它们各有优缺点,可以根据具体情况选择使用。哈希表的优点是查询速度快,但需要额外的存储空间;排序+去重的优点是不需要额外的存储空间,但排序操作的时间复杂度较高。无论采用哪种方法,都要注意边界条件的处理,以及程序的效率和鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值