Valid Triangle Number

medium two pointers sorting

Problem

Count triples (i, j, k) where the three values form a triangle.

Inputnums = [2,2,3,4]
Output3
(2,3,4),(2,3,4),(2,2,3).

def triangle_number(nums):
    nums = sorted(nums); cnt = 0
    for k in range(len(nums) - 1, 1, -1):
        i, j = 0, k - 1
        while i < j:
            if nums[i] + nums[j] > nums[k]: cnt += j - i; j -= 1
            else: i += 1
    return cnt
function triangleNumber(nums) {
  nums.sort((a, b) => a - b); let cnt = 0;
  for (let k = nums.length - 1; k >= 2; k--) {
    let i = 0, j = k - 1;
    while (i < j) {
      if (nums[i] + nums[j] > nums[k]) { cnt += j - i; j--; }
      else i++;
    }
  }
  return cnt;
}
int triangleNumber(int[] nums) {
    Arrays.sort(nums); int cnt = 0;
    for (int k = nums.length - 1; k >= 2; k--) {
        int i = 0, j = k - 1;
        while (i < j) {
            if (nums[i] + nums[j] > nums[k]) { cnt += j - i; j--; }
            else i++;
        }
    }
    return cnt;
}
int triangleNumber(vector& nums) {
    sort(nums.begin(), nums.end()); int cnt = 0;
    for (int k = nums.size() - 1; k >= 2; k--) {
        int i = 0, j = k - 1;
        while (i < j) {
            if (nums[i] + nums[j] > nums[k]) { cnt += j - i; j--; }
            else i++;
        }
    }
    return cnt;
}
Time: O(n²) Space: O(1)