题目是三数之和,官方解法是用双指针。我感觉可以分开遍历两次,时间复杂度也是O(n^2),怎么会超时呢😢😢😢
要不还是不要动脑了吧,直接背答案算了。想半天没结果🙃🙃🙃
from collections import defaultdict
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
ans = set()
nums = sorted(nums)
result_map = defaultdict(list)
any(result_map[nums[i] + nums[j]].append((i, j)) for i in range(len(nums)) for j in range(i + 1, len(nums)))
for i in range(len(nums)):
if (k := result_map.get(-1 * nums[i], None)) is not None:
sorted_triplets = map(lambda x: tuple(sorted([nums[i], nums[x[0]], nums[x[1]]])), filter(lambda x: i not in x, k))
ans.update(sorted_triplets)
return [list(triplet) for triplet in ans]