7-2 重复数据问题-hebust[JAVA]

7-2 重复数据问题-hebust (10分)
在一大堆数据中找出重复的是一件经常要做的事情。现在要处理许多整数,在这些整数中,可能存在重复的数据。 你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“yes”这三个字母;如果没有,则输出“no”。
输入格式:
程序会读到n个整数的字符串【1<=n<=10000】,以空格分开,这些整数的范围是[1,10000]。
输出格式:
如果这些整数中存在重复的,就输出: yes
否则,就输出: no
输入样例:
在这里给出一组输入。例如:

1 2 3 1 4

输出样例:
在这里给出相应的输出。例如:
yes

import java.util.Scanner; 
public class Main {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in); 
		String str=null;//创建空字符串
		str=s.nextLine();//可以读入带有空格的字符串,next()不行
		str=str.replaceAll("\\s+","");//去掉空格
		int i,j;
		int flag=0;
		char[] a=str.toCharArray();//变成字符数组
		for(i=0;i<a.length;i++)
			for(j=i+1;j<a.length;j++)
			{
				if(a[i]==a[j])//判断是否为重复元素
					{flag=1;break;}
			}
		if(flag==1) System.out.println("yes");
		else System.out.println("no");
	}
}
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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、付费专栏及课程。

余额充值