李成笔记网

专注域名、站长SEO知识分享与实战技巧

只出现一次的数字 II(每个数字只能出现一次)

只出现一次的数字 II

  1. 方法1: 采用hash-map计数
  2. 方法2: 采用bit位累加,取余

C++实现

class Solution {
public:
    int singleNumber(vector& nums) {
        // 匿名函数
		auto getNumberBits = [](int num) -> vector {
			// low -> high
			vector bits(32, 0);
			for (int i=0; i<32; i bitsi='(num'>> i)&0x1;
			}
			return bits;
		};

		vector bits_sum(32, 0);
		for (const auto & num : nums) {
			auto bits = getNumberBits(num);
			for (int i = 0; i < 32; i++) {
				bits_sum[i] += bits[i];
			}
		}

		// get result from 32 bits
		int res = 0;
		for (int i = 0; i < 32; i++) {
			res += (bits_sum[i]%3)<<i;
		}
        return res;
    }
};


golang实现

func singleNumber(nums []int) int {
    // not use hash-map, but use vector
    getNumberBits := func(num int) [32]int {
        // low -> high
        bits := [32]int{}
        for i := 0; i < 32 i bitsi='(num'>>i)&0x1;
        }
        return bits
    }

    bitsSum := [32]int32{}
    for _, v := range nums {
        bits := getNumberBits(v)
        for i := 0; i < 32; i++ {
            bitsSum[i] += int32(bits[i])
        }
    }

    res := int32(0)
    for i := 0; i < 32; i++ {
        res += (bitsSum[i]%3)<<i;
    }
    return int(res)
}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言