• 剑指 Offer II 004. 只出现一次的数字


    map就可以

    O(n)  不适用额外空间:

    int有32位,求每一位的二进制的累加和

    因为除了那个特殊数,其他数都出现三次

    那么只要一个数x,二进制的某一位为1,这一位就是 += 3

    最后将结果%3,就是特殊数在这个位上的数

    不适用额外的空间:

    外层循环是32

    内层遍历nums

    提一句:

    其实这样的话都可以,这类出现几次的数的题都可以用这种方法解

    不过出席那偶数次的可以把所有的数异或一遍就行

    同假异真

    class Solution {
    public:
        int singleNumber(vector<int>& nums) {
            int ret = 0;
            int len = nums.size();
            for(int i = 1; i <= 32; i++)
            {
                int temp = 0;
                for(int j = 0; j < len; j++ )
                {
                    temp += (nums[j] >> (32 - i)) & 1;
                }
                temp %= 3;
                ret <<= 1;
                ret += temp;
            }
            return ret;
        }
    };

    map

    class Solution(object):
        def singleNumber(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            dic = {}
            for num in nums:
                dic[str(num)] = 0
            for num in nums:
                dic[str(num)] += 1
            for num in nums:
                if(dic[str(num)] == 1):
                    return num
  • 相关阅读:
    sql except 用法,找两个表中非共同拥有的
    ‘堆’出你的洪荒之力
    原来你是个这样的JVM
    变形词
    54题
    最大对称子数组
    java 线程之间通信以及notify与notifyAll区别。
    大型网站架构系列:消息队列
    剑指offer第10题
    & 和 && 区别
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/16065539.html
Copyright © 2020-2023  润新知