leetcode259. 较小的三数之和

给定一个长度为 n 的整数数组和一个目标值 target,寻找能够使条件 nums[i] + nums[j] + nums[k] < target 成立的三元组  i, j, k 个数(0 <= i < j < k < n)。

示例:

输入: nums = [-2,0,1,3], target = 2
输出: 2 
解释: 因为一共有两个三元组满足累加和小于 2:
     [-2,0,1]
     [-2,0,3]
进阶:是否能在 O(n2) 的时间复杂度内解决?

思路:枚举左端点i,然后对i到len之间跑双指针,算出总数。

class Solution {
    public int threeSumSmaller(int[] nums, int target) {
        int ans=0;
        int len=nums.length;
        int left,right;
        Arrays.sort(nums);
        for(int i=0;i<len;++i){
            left=i+1;
            right=len-1;
            while(left<right) {
                int three=nums[left]+nums[right]+nums[i];
                if(three>=target){
                    right--;
                }else{
                    ans+=right-left;
                    left++;
                }
            }
        }
        return ans;
    }
}
发布了517 篇原创文章 · 获赞 1万+ · 访问量 123万+

猜你喜欢

转载自blog.csdn.net/hebtu666/article/details/104185253
今日推荐