【题目】:15. 三数之和
class Solution { |
- 时间复杂度: O(n^2)
- 空间复杂度: O(1)
这题要求不能重复的三元组,只要三元组的三个数是按照顺序进行排列的,这样就可以不用借助set来去充了。
所以可以先把数组进行排序,用i指针从头到尾遍历数组,遍历的时候可以利用三元组和为0的特性进行剪枝。如果i遍历的元素已经是>0,但是数组又是升序排列,后边不可能有和<0的数字,所以当i遍历到元素>0时,直接break。
遍历的时候要注意,可能会有相同的数字连续出现多次。
情况1. nums[i] == nums[i - 1],这种情况可以直接continue。
情况2. 当已经找到一个三元组后,可能nums[l] == nums[l + 1],此时都应该使用while循环(可能有多个)排除在外。但是要注意,退出循环的时候,如果是nums[l] != nums[l + 1],但是此时nums[l] == nums[l - 1],这样就会出现死循环。所以一定要在推出while循环后再做一次++l的操作。
>tags:
- 算法
- LeetCode热题100
- 双指针
>categories: LeetCode热题100
>type: LeetCode热题100
>top_img: false