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,如果有错请留言,我看到了会修改的!谢谢!