Valid Triangle Number

 Given an integer array nums, return the number of triplets chosen from the array that can make triangles if we take them as side lengths of a triangle.

Example 1:


Input: nums = [2,2,3,4]

Output: 3

Explanation: Valid combinations are: 

2,3,4 (using the first 2)

2,3,4 (using the second 2)

2,2,3

Example 2:


Input: nums = [4,2,3,4]

Output: 4


class Solution {
    public int triangleNumber(int[] nums) {
       
           Arrays.sort(nums); // Step 1: sort the array
        int count = 0;
        int n = nums.length;

        // Step 2: fix the largest side
        for (int k = n - 1; k >= 2; k--) {
            int start = 0;
            int end = k - 1;

            // Step 3: use two pointers
            while (start < end) {
                if (nums[start] + nums[end] > nums[k]) {
                    count += (end - start);  // all pairs from i to j-1 are valid
                    end--;
                } else {
                    start++;
                }
            }
        }

        return count;
    }

    }

Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence