要求:
分析:
图解

代码示例:
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
n = len(nums)
diff_num = 0
for i in range(n):
#当前i指针处为黑,将最近的白和其交换
if nums[i] == val:
'''
这里必须这样if,否则会超界,
也不能在上层循环只遍历range(n-1),
因为还必须检测最后一个数字
'''
if i<n-1:
for j in range(i+1,n):
if nums[j] != val:
tp = nums[i]
nums[i] = nums[j]
nums[j] = tp
diff_num+=1
break
else:
diff_num+=1
return diff_num
**优化分析:**从图解可以看到,将最近的白色元素和黑色元素交换,极有可能将黑色元素仅仅是移动到了下一位,那么这将为下一位带来冗余操作
优化前后对比:
优化前:

优化后:
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
n = len(nums)
diff_num = 0
for i in range(n):
#当前i指针处为黑,将最近的白和其交换
if nums[i] == val:
'''
这里必须这样if,否则会超界,
也不能在上层循环只遍历range(n-1),
因为还必须检测最后一个数字
'''
if i<n-1:
**j = n-1
while j!=i:
if nums[j] != val:
tp = nums[i]
nums[i] = nums[j]
nums[j] = tp
diff_num+=1
break
j-=1**
else:
diff_num+=1
return diff_num
