Valid Triangle Number

LeetCode Q 611 - Valid Triangle Number

Given an array consists of non-negative integers, your task is to count 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: [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

Note:

  • The length of the given array won’t exceed 1000.
  • The integers in the given array are in the range of [0, 1000]

Solution

Solution : Two pointers

Brute-force method:

for (i = 0; i < len - 2; i++) {
	for (j = i + 1; j < len - 1; j++) {
		for (k = j + 1; k < len; k++) {
			if (nums[i] + nums[j] > nums[k]) count++;
		}
	}
}

Time complexity is O(n^3).

We can simply the above method using two pointers, then the ime complexity becomes O(n^2).

Code:


public int triangleNumber(int[] nums) {
	
	Arrays.sort(nums);

	int res = 0;
	for (int k = nums.length - 1; k >= 2; k--) {
		
		int l = 0, right = k - 1;
		
		while (l < r) {
			if (nums[l] + nums[r] > nums[k]) {
				res += (r - l);
				r--;
			} else {
				l++;
			}
		}
	}

	return res;
}

   Reprint policy


《Valid Triangle Number》 by Tong Shi is licensed under a Creative Commons Attribution 4.0 International License
  TOC