当前位置: 代码迷 >> 综合 >> 模拟卷Leetcode【剑指 Offer】Offer_56 - II. 数组中数字出现的次数 II
  详细解决方案

模拟卷Leetcode【剑指 Offer】Offer_56 - II. 数组中数字出现的次数 II

热度:97   发布时间:2023-09-26 20:05:39.0

Offer_day22_56 - II. 数组中数字出现的次数 II

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

示例 1:

输入:nums = [3,4,3,3]
输出:4
示例 2:

输入:nums = [9,1,7,9,7,9,7]
输出:1

限制:

1 <= nums.length <= 10000
1 <= nums[i] < 2^31

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

代码:

from leetcode_python.utils import *class Solution:def __init__(self):"""感觉自己智商可能是负的"""passdef singleNumber(self, nums: List[int]) -> int:returndef singleNumber_遍历统计(self, nums: List[int]) -> int:counts = [0] * 32for num in nums:for j in range(32):counts[j] += num & 1num >>= 1res, m = 0, 3for i in range(32):res <<= 1res |= counts[31 - i] % mreturn res if counts[31] % m == 0 else ~(res ^ 0xffffffff)def singleNumber_有限状态自动机(self, nums: List[int]) -> int:ones, twos = 0, 0for num in nums:ones = ones ^ num & ~twostwos = twos ^ num & ~onesreturn onesdef test(data_test):s = Solution()return s.singleNumber(*data_test)def test_obj(data_test):result = [None]obj = Solution(*data_test[1][0])for fun, data in zip(data_test[0][1::], data_test[1][1::]):if data:res = obj.__getattribute__(fun)(*data)else:res = obj.__getattribute__(fun)()result.append(res)return resultif __name__ == '__main__':datas = [[],]for data_test in datas:t0 = time.time()print('-' * 50)print('input:', data_test)print('output:', test(data_test))print(f'use time:{
      time.time() - t0}s')

备注:
GitHub:https://github.com/monijuan/leetcode_python

CSDN汇总:模拟卷Leetcode 题解汇总_卷子的博客-CSDN博客

可以加QQ群交流:1092754609

leetcode_python.utils详见汇总页说明
先刷的题,之后用脚本生成的blog,如果有错请留言,我看到了会修改的!谢谢!