给你一个长度为 n
的整数数组 nums
和 一个目标值 target
。请你从 nums
中选出三个整数,使它们的和与 target
最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
示例 1:
输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。示例 2:
输入:nums = [0,0,0], target = 1 输出:0
收获:
1.从暴力枚举O(n3)优化到O(n2),固定i,然后剩下的j,k从本来的二重循环枚举O(n2)->采用双指针O(n1):
2.如何理解双指针的优化:
- j和k,同时从左边开始跑,一起跑到最右边,j和k都不能往左只能往右—–>O(n)
- j和k,j作为left从最左端开始跑,一个作为right从最右端开始跑,二者一起向中间跑—>O(n)
- 也正是因为只能一个从左端开始,一个从右端开始,所以才能向下降低一级复杂度
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int ans = nums[0] + nums[1] + nums[2];
for(int i=0;i target)
end--;
else if(sum
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net