一个整型数组里除了两个数字之外,其他的数字都出现了两次

本文介绍了一种使用Java实现的算法,该算法能在O(n)的时间复杂度和O(1)的空间复杂度内找到数组中仅出现一次的两个数字。通过LinkedHashMap记录每个数字出现的次数,最终筛选出出现一次的数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

另外一种方法

/**
 数组中只出现一次的数字。
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。比如{1,2,1,3,4,3,4,5,6,6,7,5},输出为2和7
请写程序找出这两个只出现一次的数字。要求时间复杂度是 O(n),空间复杂度为 O(1);

思路:用集合框架来做,先定义个LinkedHashMap
	每次依次存储整型数组中的元素之前,先判断下集合中是否有这个元素(containsKey)
	若集合中有这个元素,则将这个元素(键)对应的 出现次数加1(值)
	若没有出现这个元素,则将这个元素(键)对应的 出现次数设为1(值)
	然后取出键keySet对应值为1的键
  借鉴前面程序替代方法。
  day7_08
 * */
import java.util.*;
public class ArrayDigitalOccurOneTimes_2 {
	public static void main(String[] args){
		int[] a={1,2,1,3,4,3,4,5,6,6,7,5};
		find(a);
	}
	
	public static void find(int[] arr){
		LinkedHashMap<Integer,Integer> hash = new LinkedHashMap<Integer,Integer>();
		for(int i=0;i<arr.length;i++){
			if(hash.containsKey(arr[i])){
				hash.put(arr[i], hash.get(arr[i])+1);
				
			}
			else
				hash.put(arr[i], 1);
			
		}
		Set set=hash.keySet();
		Iterator<Integer> it =set.iterator();
		while(it.hasNext()){
			Integer a = it.next();
			if(hash.get(a)==1)
			System.out.println(a);
		
		}
		/*
		for(Integer b : hash.keySet ){
			if(hash.get(b)==1)
			System.out.println(b);
		
		}




		*/
			
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值