Will I leave?.|

Canyooo

园龄:3年6个月粉丝:1关注:1

【LeetCode】#136. 只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4
复制代码
方法一:暴力!!!
    public int singleNumber(int[] nums) {
        for(int i = 0; i < nums.length; i++){
            for(int j = 0; j < nums.length; j++){
                if(nums[i] == nums [j] && i != j){
                    break;
                }else{
                    if (j == nums.length - 1){
                        if(i == j){
                            return nums[i];
                        }else{
                            if(nums[i] == nums [j])break;
                            else{
                                return nums[i];
                            }
                        }
                    }
                    if (nums[i] != nums [j] && i != j){
                        continue;
                    }
                }
            }
        }
        return -1;
    }
复制代码
复制代码
方法二:哈希表判断是否只出现一次
    public int singleNumber(int[] nums) {
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        for(int i:nums){
            Integer count = map.get(i);
            count = count == null ? 1 : ++count;
            map.put(i,count);
        }
        for(int i:map.keySet()){
            int count = map.get(i);
            if(count == 1){
                return i;
            }
        }
        return -1;
    }
复制代码
复制代码
方法三:无敌位运算
因为a^a=0  a^0=a
class Solution {
    public int singleNumber(int[] nums) {
        int single = 0;
        for (int num : nums) {
            single ^= num;
        }
        return single;
    }
}
复制代码

知识点:

位运算异或^:a^a=0   a^0=a

具体位运算链接:位运算(&、|、^、~、>>、 | 菜鸟教程 (runoob.com)

总结:

多思考,使用运算效率最高。

本文作者:Canyooo

本文链接:https://www.cnblogs.com/canyooo/p/15317734.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Canyooo  阅读(24)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 黑洞里 方大同
黑洞里 - 方大同
00:00 / 00:00
An audio error has occurred.

Not available