2024/12/9 【哈希表】LeetCode 15.三数之和 【❌】知识点:sort和sorted函数
方法一:双指针法
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: res = [] nums.sort() for i in range(len(nums)): if nums[i] > 0: return res if i > 0 and nums[i] == nums[i-1]: continue left = i+1 right = len(nums)-1 while left < right: sum = nums[i] + nums[left] + nums[right] if sum > 0: right -= 1 elif sum < 0: left += 1 else: res.append([nums[i], nums[left], nums[right]]) while left < right and nums[right] == nums[right-1]: right -= 1 while left < right and nums[left] == nums[left+1]: left += 1 left += 1 right -= 1 return res
sort() ,sorted()函数
Python中的sort()
方法是用于对列表进行排序的一个方法。它可以对列表中的元素进行就地排序(即修改原列表),并且默认按升序排列。
sort()
方法只有在列表类型上才可用,且它是一个就地操作,这意味着它不会返回一个新的列表,而是直接对原列表进行修改。
可选参数
sort()
方法接受两个可选参数:
- key:一个函数,用来从每个列表元素中提取出一个用于比较的值。默认情况下,
key
为None
,即直接对元素本身进行比较。 - reverse:如果为
True
,则会对列表进行降序排列;如果为False
(默认值),则按升序排列。
示例
使用key
参数
假设有一个列表,里面包含一些元组,我们希望按照元组的第二个元素进行排序:
my_list = [(1, 'one'), (3, 'three'), (2, 'two')] my_list.sort(key=lambda x: x[1]) # 按照元组的第二个元素进行排序 print(my_list) # 输出: [(1, 'one'), (3, 'three'), (2, 'two')]
使用reverse
参数
我们可以设置reverse=True来进行降序排序: my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] my_list.sort(reverse=True) print(my_list) # 输出: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
返回值
sort()
方法没有返回值,它会直接对原列表进行修改。如果你需要保持原列表不变并返回排序后的新列表,可以使用sorted()
方法,它返回一个新的排序后的列表,而不会修改原列表。
my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] sorted_list = sorted(my_list) print(sorted_list) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] # 原列表不变 print(my_list) # 输出: [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
方法二:使用字典的
看不懂
if j > i + 2 and nums[j] == nums[j-1] == nums[j-2]: # 三元组元素b去重 continue