欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Triangle Count (Lintcode 382)

程序员文章站 2024-03-06 20:28:44
...

这道题相当于two sum 以及 two sum II 的follow up题。是two pointer类题目。而这道题的要点是。两个pointer均要在 i 的左边。这跟three sum有着方式上的区别。

所以要记住这样的方法。当two pointer在 i 的右边讨论不出来时,想想把他们放到 i 的左边。

int triangleCount(vector<int> &S) {
        // write your code here
        if(S.size() < 3) return 0;
        sort(S.begin(), S.end());
        int cnt = 0;
        for(int i=2; i<S.size(); i++){
            int left = 0, right = i-1;
            while(left < right){
                if(S[left] + S[right] > S[i]){
                    cnt += right - left;
                    right--;
                }else{
                    left++;
                }
            }
        }
        return cnt;
    }