. - 力扣(LeetCode) 想复杂了,直接一步一步走一个for循环就结束了。。 from typing import List class Solution: def relocateMarbles(self, nums: List[int], moveFrom: List[int], moveTo: List[int]) -> List[int]: ''' 题目说测试数据保证在进行第 i 步操作时,moveFrom[i] 处至少有一个石块。 所以每次操作结束时刻开始的位置必定没有石头,结束的位置必定有石头。 但是之后的操作又有可能将石头移动到没有石头的位置 当moveForm[i]操作后,moveTo[>i]的元素都不等于moveForm[i],moveForm[i]必定没有石头 moveTo[i]操作后,moveForm[>i]的元素都不等于moveTo[i],moveTo[i]必定有石头 可能移动到初始就没有石头的位置 题目要求返回有石头的位置 所有我们只需要找出没有石头的位置排除掉,在找出有石头的位置加入就行 ''' set_list = set(nums) for i in range(len(moveFrom)): set_list.remove(moveFrom[i]) set_list.add(moveTo[i]) # no_flag = False # had_flag = False # for j in range(i + 1, n): # if (moveTo[j] == moveFrom[i]): # no_flag = True # break # if (moveFrom[j] == moveTo[i]): # had_flag = True # break # if not no_flag: # set_list.remove(moveFrom[i]) # if not had_flag and moveTo[i] not in nums: # set_list.add(moveTo[i]) return sorted(list(set_list))