Leetcode 611. 有效三角形的個數 (排序後雙指標優化)

wwxy261發表於2020-12-16

 

排序,直接列舉時間複雜度O(n^3)

雙指標優化:排序後,首先列舉最大的邊,列舉最大的邊之後,在列舉第二大的邊,在列舉第二大的邊的時候,最小的邊只會不斷向右移動,不會後退,因此可以去掉一重迴圈。程式碼如下:

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int n = nums.size();
        int k = 0, res = 0;
        for(int i=2;i<n;i++){
            for(int j=i-1,k=0;j>k;j--){
                while(k<j&&nums[k]+nums[j]<=nums[i]) k++;
                res += j-k;   // k k+1, k+2, j-1 //           j-k-1+1
            }
        }
        return res;
    }
};

 

相關文章