LeetCode 259. 较小的三数之和(双指针)

题意:

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

数据范围:
题目没说.

解法:

将序列排序,
设a[i]<=a[j]<=a[k],
枚举j和k,那么i需要满足<target-a[j]-a[k],
在k右移的过程中,i只能左移,满足单调性,开一个指针维护即可.

code:

class Solution {
    
    
public:
    int threeSumSmaller(vector<int>& a, int target) {
    
    
        sort(a.begin(),a.end());
        int n=a.size();
        int ans=0;
        for(int j=0;j<n;j++){
    
    
            int i=j-1;
            for(int k=j+1;k<n;k++){
    
    
                int x=target-a[j]-a[k];
                while(i>=0&&a[i]>=x){
    
    
                    i--;
                }
                ans+=(i+1);
            }
        }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/114055455