Leetcode611. 有效三角形的个数

180 阅读1分钟

这道题是三数之和和双指针结合的一道题

  • 首先对数组排序。
  • 固定最长的一条边,运用双指针扫描
  • 如果 nums[l] + nums[r] > nums[i],同时说明 nums[l + 1] + nums[r] > nums[i], ..., nums[r - 1] + nums[r] > nums[i],满足的条件的有 r - l 种,r 左移进入下一轮。
  • 如果 nums[l] + nums[r] <= nums[i],l 右移进入下一轮。
  • 枚举结束后,总和就是答案。 时间复杂度为 O(n^2)。

image.png

class Solution {
    public int triangleNumber(int[] nums) {
        if(nums.length<3) return 0;
        Arrays.sort(nums);
        int count = 0;
        for(int i=nums.length-1;i>=2;i--){
            int l = 0,r = i-1;
            while(l<r){
                if(nums[l]+nums[r]>nums[i]){
                    count+=r-l;
                    r--;
                }else l++;
            }
        }
        return count;
    }
}