1 class Solution(object): 2 def threeSumSmaller(self, nums, target): 3 """ 4 :type nums: List[int] 5 :type target: int 6 :rtype: int 7 """ 8 nums.sort() 9 n = len(nums) 10 ans = 0 11 12 for k in range(n): 13 i, j = k+1, n-1 14 while i<j: 15 sum3 = nums[k] + nums[i] + nums[j] 16 if sum3 < target: 17 ans += j - i 18 i += 1 19 else: 20 j -= 1 21 return ans
Given an array of n integers nums and a target, find the number of index triplets i, j, k
with 0 <= i < j < k < n
that satisfy the condition nums[i] + nums[j] + nums[k] < target
.
For example, given nums = [-2, 0, 1, 3]
, and target = 2.
Return 2. Because there are two triplets which sums are less than 2:
[-2, 0, 1] [-2, 0, 3]
Follow up:
Could you solve it in O(n2) runtime?
思路: 相遇型two pointers。注意L17, 这一句的意思是,如果 nums[k] + nums[i] + nums[j] < target,那么i和j之间的所有nums[p]+nums[k]+nums[i]也都满足条件。