• 剑指 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
  • 相关阅读:
    [CF-Edu113]D. Inconvenient Pairs
    第3组团队Git现场编程实战
    团队项目-选题报告
    第一次个人编程作业
    第一次软工博客作业
    (二十二)python 3 sort()与sorted()
    (二十一)python 3 内置函数
    (二十)python 3 匿名函数
    (十九)python 3 内嵌函数和闭包
    (十八)python 3 回调函数
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/16065539.html
Copyright © 2020-2023  润新知