leetcode 611. 有效三角形的个数(Valid Triangle Number)

给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。

示例 1:

输入: [2,2,3,4]
输出: 3
解释:
有效的组合是: 
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3

注意:

  1. 数组长度不超过1000。
  2. 数组里整数的范围为 [0, 1000]。

 

 

原题链接

 

暴力解法 O(n^3)  小优化 break

 

class Solution {
    public int triangleNumber(int[] nums) {
        int n = nums.length;
        if(n<3)
            return 0;
        Arrays.sort(nums);
        int t=0;
        for(int i=0;inums[k] && nums[k]-nums[j]

 

 

beat 100% 双指针

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

 

你可能感兴趣的:(leetcode)