题目:原题链接(中等)
标签:数学
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( N ) O(N) O(N) | O ( N ) O(N) O(N) | 272ms (8.33%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
class Solution:
def guessMajority(self, reader: 'ArrayReader') -> int:
size = reader.length()
# 计算前4个的情况:不妨设第1个为0
dp = [0]
v0 = reader.query(1, 2, 3, 4)
v1 = reader.query(0, 2, 3, 4)
v2 = reader.query(0, 1, 3, 4)
v3 = reader.query(0, 1, 2, 4)
dp.append(0 if v1 == v0 else 1)
dp.append(0 if v2 == v0 else 1)
dp.append(0 if v3 == v0 else 1)
# 计算每一种情况的出现次数
v0 = reader.query(0, 1, 2, 3)
for i in range(4, size):
v1 = reader.query(i - 3, i - 2, i - 1, i)
if v0 == v1:
dp.append(dp[-4])
else:
dp.append(1 - dp[-4])
v0 = v1
n1 = dp.count(0)
n2 = dp.count(1)
if n1 > n2:
return dp.index(0)
elif n1 < n2:
return dp.index(1)
else:
return -1