class Solution(object):
def removeElement(self, nums, val):
left = 0
right = len(nums) - 1
while left <= right:
if nums[right] == val:
right = self.fromRightSlide(nums, val, right)
continue
if nums[left] == val:
nums[left] = '_'
self.swap(nums, left, right)
right -= 1
left += 1
right = len(nums) - 1
while len(nums) > 0 and nums[right] == "_" :
nums.pop()
right -= 1
def swap(self,nums, i, j):
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
def fromRightSlide(self, nums, val, right):
while right >= 0 and nums[right] == val :
nums[right] = '_'
right -= 1
return right
Y2xhc3MgU29sdXRpb24ob2JqZWN0KToKICAgIGRlZiByZW1vdmVFbGVtZW50KHNlbGYsIG51bXMsIHZhbCk6CiAgICAgICAgbGVmdCA9IDAKICAgICAgICByaWdodCA9IGxlbihudW1zKSAtIDEKICAgICAgICAKICAgICAgICB3aGlsZSBsZWZ0IDw9IHJpZ2h0OgogICAgICAgICAgICBpZiBudW1zW3JpZ2h0XSA9PSB2YWw6CiAgICAgICAgICAgICAgICByaWdodCA9IHNlbGYuZnJvbVJpZ2h0U2xpZGUobnVtcywgdmFsLCByaWdodCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIG51bXNbbGVmdF0gPT0gdmFsOgogICAgICAgICAgICAgICAgbnVtc1tsZWZ0XSA9ICdfJwogICAgICAgICAgICAgICAgc2VsZi5zd2FwKG51bXMsIGxlZnQsIHJpZ2h0KQogICAgICAgICAgICAgICAgcmlnaHQgLT0gMQogICAgICAgICAgICBsZWZ0ICs9IDEKICAgICAgICByaWdodCA9IGxlbihudW1zKSAtIDEKICAgICAgICB3aGlsZSBsZW4obnVtcykgPiAwIGFuZCBudW1zW3JpZ2h0XSA9PSAiXyIgOgogICAgICAgICAgICBudW1zLnBvcCgpCiAgICAgICAgICAgIHJpZ2h0IC09IDEKICAgICAgICAgICAgCiAgICBkZWYgc3dhcChzZWxmLG51bXMsIGksIGopOgogICAgICAgIHRlbXAgPSBudW1zW2ldCiAgICAgICAgbnVtc1tpXSA9IG51bXNbal0KICAgICAgICBudW1zW2pdID0gdGVtcAogICAgZGVmIGZyb21SaWdodFNsaWRlKHNlbGYsIG51bXMsIHZhbCwgcmlnaHQpOgogICAgICAgIHdoaWxlIHJpZ2h0ID49IDAgYW5kIG51bXNbcmlnaHRdID09IHZhbCA6CiAgICAgICAgICAgIG51bXNbcmlnaHRdID0gJ18nCiAgICAgICAgICAgIHJpZ2h0IC09IDEKICAgICAgICByZXR1cm4gcmlnaHQ=