Problem Statement
(Source) There is a list of sorted integers from 1 to n. Starting from left to right, remove the first number and every other number afterward until you reach the end of the list.
Repeat the previous step again, but this time from right to left, remove the right most number and every other number from the remaining numbers.
We keep repeating the steps again, alternating left to right and right to left, until a single number remains.
Find the last number that remains starting with a list of length n.
Example:
Input: n = 9, 1 2 3 4 5 6 7 8 9 2 4 6 8 2 6 6 Output: 6
Solution
Credits @NathanNi
class Solution(object):
def lastRemaining(self, n):
"""
:type n: int
:rtype: int
"""
head = 1
step = 1
left = True
while n > 1:
if left or n % 2:
head += step
step <<= 1
left = not left
n >>= 1
return head

本文介绍了一个筛选算法的具体实现过程,该算法从一个有序整数列表中逐步移除元素,最终找到最后一个剩余的数字。通过一个Python类实现了算法,并提供了一个示例说明如何使用该算法求解特定输入。
905

被折叠的 条评论
为什么被折叠?



