zoukankan      html  css  js  c++  java
  • 136. Single Number

    Given a non-empty 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?

    Example 1:

    Input: [2,2,1]
    Output: 1
    

    Example 2:

    Input: [4,1,2,1,2]
    Output: 4
    

    M1: bit maipulation

    xor ^
    Concept
    If we take XOR of zero and some bit, it will return that bit ==> a xor 0 = a
    If we take XOR of two same bits, it will return 0 ==> a xor a = 0
    a xor b xor a = (a xor a) xor b = 0 xor b = b
    So we can XOR all bits together to find the unique number.

    public class Solution {
        /**
         * @param A: An integer array
         * @return: An integer
         */
        public int singleNumber(int[] A) {
            // write your code here
            int res = 0;
            for(int a : A) {
                res ^= a;
            }
            return res;
        }
    }



    M2: hashmap

    时间复杂度O(n),空间复杂度O(n)

    public class Solution {
        /**
         * @param A: An integer array
         * @return: An integer
         */
        public int singleNumber(int[] A) {
            // write your code here
            HashMap<Integer, Integer> map = new HashMap<>();
            for(int a : A) {
                map.put(a, map.getOrDefault(a, 0) + 1);
            }
            int res = 0;
            for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
                if(entry.getValue() == 1)
                    res = entry.getKey();
            }
            return res;
        }
    }

    M3: hashset

    遍历数组,如果不能往set里添加元素,说明重复,将该元素移除。最后set里剩下的就是唯一一个只出现一次的元素

    public class Solution {
        /**
         * @param A: An integer array
         * @return: An integer
         */
        public int singleNumber(int[] A) {
            // write your code here
            Set<Integer> set = new HashSet<>();
            for(int a : A) {
                if(!set.add(a))
                    set.remove(a);
            }
            return set.iterator().next();
        }
    }
  • 相关阅读:
    【TouchGFX Designer】文本视图
    【TouchGFX Designer】配置视图
    【C++】类大小
    【TouchGFX】Widgets and Containers
    【TouchGFX】屏幕概念
    【TouchGFX】代码结构
    【C++】虚函数
    【TouchGFX】UI Components
    【C++】模板
    【C++】static 静态成员
  • 原文地址:https://www.cnblogs.com/fatttcat/p/9988321.html
Copyright © 2011-2022 走看看