查找数组中只出现一次的数字

在一个博客上看到一个这样的算法题:一个数组中有三个数字abc只出现一次,其他数字都出现了两次,请找出三个只出现一次的数字。(原题地址:微软、Googel等面试题

在不考虑时间和空间复杂度的条件下,使用java语言实现了该算法。首先使用一个数组des[]作为保存所要寻找的三个数字, 同时使用一个数组temp[] 作为保存出现两次的数字的下标,对于只出现一次的使用 -1保存。

如图: 上图为原始数据,下图保存下标。


下面是实现代码:

public class Demo {  
    public static void main(String[] args) {  
        // 测试数组  
        int[] array = {5,1,10,2,7,2,5,10,7,11,20};  
        int[] b = new int[3];  
          
        // 打印测试数组  
        for(int i=0; i<array.length; i++) {  
            System.out.print( array[i] + " ");  
        }  
        System.out.println("");  
          
        b=findNumber(array);  
          
        // 打印数组  
        for(int i=0; i<b.length; i++) {  
            System.out.print( b[i] + " ");  
        }  
        System.out.println("");  
    } 

	public static int[] findNumber(int[] array) {  
        int flag =0; 
		int[] des = new int[3];// 保存只出现一次的数字
		
		int[] temp = new int[array.length];// 保存数组下标
		
		for( int i=0; i<array.length; i++ ) {
			for( int j=0; j<array.length; j++) {
				if( array[i] != array[j] && i!=j) {
					continue;
				}
				
				if( array[i] == array[j] && i!=j) {
					temp[j] =j; // 下标赋值
					break;
				}else{
					temp[i] = -1; // 只出现一次标识为-1
				}
			}
		}
		
		for( int k=0; k<temp.length; k++) {
			if( temp[k] == -1) {				// 查找标识为-1 下标
				des[flag] = array[k];flag++;
			}
		}
		
		return des;
	}
}

End: 如需看原题的实现,请看上面连接地址。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值