我是靠谱客的博主 土豪冷风,最近开发中收集的这篇文章主要介绍剑指刷题-面试题56 - II. 数组中数字出现的次数 II,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
在这里插入图片描述
解法
解法一:循环遍历
思想:循环遍历,取出的每个数字分别与列表里的所有数字比较,有相同的就加一。统计count,如果count为1就打印出x。如果不是就说明不是想要的数字用continue跳出内循环。

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        for x in nums:
            count=0
            for y in nums:
                if x==y:
                    count=count+1
            if count == 1:
                return x
            else:
                continue

解法二:二进制取余法
思想:
统计所有数字二进制位的和
判断每一位的和能否被3整除,求解最后结果
在这里插入图片描述

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        bitSum = [0] *32 #定义存储各个位的数组

        for i in nums: #统计各位之和
            mask = 1
            # 一位一位的判断,从最后一位开始,
            # reversed(range(32)) ---[31,,,0]
            for j in reversed(range(32)):
                # 位上如果为1就会mask与之后为1
                if mask & i:
                    bitSum[j] += 1
                mask = mask << 1
		# 每位分别去% 3,得到的数就是result
        result = 0
        for i in range(32):# 得到最终结果
            result = result << 1
            result += bitSum[i] % 3

        return result

(以下解法二,解法一结果)
解法二,解法一结果

最后

以上就是土豪冷风为你收集整理的剑指刷题-面试题56 - II. 数组中数字出现的次数 II的全部内容,希望文章能够帮你解决剑指刷题-面试题56 - II. 数组中数字出现的次数 II所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部