Brute Force
按照题目中的要求不断得到新的array,然后return最终的答案
如何优化?
整条array都是有用信息吗?不,我们只需要第一个element。
怎么样得到第一个element(基于初始array index)?
1.双数轮和remaining个数是奇数的时候,增加step的个数
2.反之,不变
step如何增加?step每次都增加两倍
什么时候停?每次remaining的个数都是之前的1/2,到只剩下一个数的时候停
class Solution:
def lastRemaining(self, n: int) -> int:
left = True
remaining = n
step = 1
head = 1
while (remaining > 1):
if left or remaining%2==1:
head = head + step
remaining = int(remaining/2)
step = step*2
left = not left
return head