LeetCode练习一:Single Number

Single Number

Given an array of integers, every element appears twice except for one. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

题目要求是给定一个整形数组,该数组中只有一个元素不是成对出现的,找到这个元素。要求算法的时间复杂度是线性的。

这道题的解题思路就是:一个整数和他自己异或得到的结果是零。

所以该题的解法就是初始化一个值为0的数,与该数组中每一个数执行异或操作,最后得到的数便是该数组中唯一一个不成对的整数。

下面是用java实现的代码:

public class Solution {
    public int singleNumber(int[] A) {
        int result = 0;
        for(int i = 0;i<A.length;i++){
            result = result ^ A[i];
        }
        return result;
    }
}


当然此题如果不考虑时间复杂度,做法还是很多的,比如用哈希表来完成。

HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
	    for (int i = 0; i < A.length; i++){
	        if(!map.containsKey(A[i])) {
	            map.put(A[i], i);
	        }
	        else {
	            map.remove(A[i]);
	        }
	    }
	    for (int i = 0; i < A.length; i++){
	        if(map.containsKey(A[i])) {return A[i];}
	    }
	    return 0;


但是此算法的时间复杂度是nlgn,这是因为map.containsKey的时间复杂度是O(logN) 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值