重复习简单基础算法(三):数组中找出重复数据

导读:

       输入一组一维数组数据中为[2,2,5,3,5],找出重复数据2,5。(简析:因为这道题很简单但是我做了超出了我预想的时间,所以记录一下)


JAVA代码:

public class repeateDataFind{
	private static int repeatNum = 0;
	private static boolean flag = false;
	
		public static void main(String[] args){
			   Scanner s = new Scanner(System.in);  //输入流
			   System.out.print("输入你的数组长度:");  
			   int n = s.nextInt(); 
			   int[] stater = new int[n];
			   for(int i =0 ;i<n;i++){
				   Scanner word = new Scanner(System.in);  
				   System.out.print("输入你的值"+ i +":"); 
				   int data = s.nextInt(); 
				   stater[i] = data;
				   
			   }
			   System.out.print("输入你的数组为:");  
			   for(int i =0 ;i<n;i++){
				   	System.out.print(stater[i]+" ");   
			   }
			   System.out.println();
			   repeatData(stater, n);
		}

		//寻找重复数
		public static void repeatData(int[] numbers, int n){
			Set<String> set = new HashSet<String>();//set方法去重
			   for(int i = 0 ; i < n;i++){
				   int forcastData = numbers[i];
				   for(int j = i; j < n-1 ; j++){
					   if(forcastData == numbers[j+1]){
						   repeatNum++;
						   set.add(String.valueOf(forcastData));//转换成字符串
						   flag = true;
					   }
				   }
			   }
				if(flag == true){ 
					   System.out.print("重复数据为");
					   for(String ok : set){
						   System.out.print(ok + " ");
					   }
				}
				else{
					   System.out.println("sorry,没有重复的数据");
				}
		}
		
}

 测试图

原理:

          repeatData方法就是来寻找数组重复的数据的,这个我自己写的一个方法。一开始我以为需要排序,然后发现排序并不能够减少时间复杂度,只好老老实实的一个一个比较。当然我有想过用类似hadoop分布式来进行分割寻找匹配,但一想还是不能够根本上解决时间复杂度的问题。第二个问题是关于重复数据找到再次去重的问题,比如说数组[2,2,2],那么输出应该就是2,而不是2,2,这里我想到的是用set数据结构去重,set集合有去重功能,下意识转换成字符串来解决了。输出的还是正确的,如果需要再次转换成int就可以了(Integer.valueof()方法来转,Integer自动拆箱成int类型,所以可以用int接收)。


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值