赞
踩
Given an integer array nums where every element appears three times except for one, which appears exactly once. Find the single element and return it.
You must implement a solution with a linear runtime complexity and use only constant extra space.
Using trinary solving, all numbers are converted to trinary. Adding each digit and taking the remainder of the pair of three, sum them up to the result. A special treatment is required when taking the remainder of a negative number. To reduce space, scanning by digit.
class Solution: def singleNumber(self, nums: List[int]) -> int: sLen = len(nums) p_cnt, n_cnt = 0, 0 for i in range(sLen): p_cnt += (nums[i] > 0) n_cnt += (nums[i] < 0) if p_cnt % 3 == 0: if n_cnt % 3 == 0: return 0 else: ans = 0 base = 1 for k in range(20): val = 0 for i in range(sLen): if nums[i] < 0: val += ((-1-nums[i]) // base) % 3 ans += val % 3 * base base *= 3 return -1-ans else: ans = 0 base = 1 for k in range(20): val = 0 for i in range(sLen): if nums[i] > 0: val += nums[i] // base % 3 ans += val % 3 * base base *= 3 return ans
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。