Skip to content

Commit 819a5a8

Browse files
committed
ValidTriangleNumber
Signed-off-by: Gopal S Akshintala <[email protected]>
1 parent 5a9d2ba commit 819a5a8

File tree

2 files changed

+51
-12
lines changed

2 files changed

+51
-12
lines changed

ds-algo/src/main/java/practice/ThreeSum.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,22 @@ public class ThreeSum {
99
public List<List<Integer>> threeSum(int[] nums) {
1010
Arrays.sort(nums);
1111
var result = new ArrayList<List<Integer>>();
12-
for (var i = 0; i < nums.length; i++) {
13-
if (i == 0 || nums[i] != nums[i - 1]) {
14-
var j = i + 1;
15-
var k = nums.length - 1;
16-
while (j < k) {
17-
var sum = nums[i] + nums[j] + nums[k];
12+
for (var left1 = 0; left1 < nums.length; left1++) {
13+
if (left1 == 0 || nums[left1] != nums[left1 - 1]) {
14+
// ! init left2, right in the inner loop
15+
var left2 = left1 + 1;
16+
var right = nums.length - 1;
17+
while (left2 < right) {
18+
var sum = nums[left1] + nums[left2] + nums[right];
1819
if (sum > 0) {
19-
k--;
20+
right--;
2021
} else if (sum < 0) {
21-
j++;
22+
left2++;
2223
} else {
23-
result.add(Arrays.asList(nums[i], nums[j], nums[k]));
24-
do {
25-
j++;
26-
} while (nums[j] == nums[j - 1] && j < k);
24+
result.add(Arrays.asList(nums[left1], nums[left2], nums[right]));
25+
do {
26+
left2++;
27+
} while (nums[left2] == nums[left2 - 1] && left2 < right);
2728
}
2829
}
2930
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package practice;
2+
3+
/* 26 Oct 2025 12:14 */
4+
5+
import java.util.Arrays;
6+
7+
import static java.lang.IO.println;
8+
9+
/**
10+
* [611. Valid Triangle Number](https://leetcode.com/problems/valid-triangle-number/)
11+
*/
12+
public class ValidTriangleNumber {
13+
public int triangleNumber(int[] nums) {
14+
Arrays.sort(nums);
15+
var count = 0;
16+
// ! Fix the largest side (right) and find pairs of smaller sides
17+
for (var right = nums.length - 1; right >= 2; right--) {
18+
var left1 = 0;
19+
var left2 = right - 1;
20+
while (left1 < left2) {
21+
if (nums[left1] + nums[left2] > nums[right]) {
22+
// ! All elements between left1 and left2 form valid triangles with left2 and right
23+
count += left2 - left1;
24+
left2--;
25+
} else {
26+
left1++;
27+
}
28+
}
29+
}
30+
return count;
31+
}
32+
33+
static void main() {
34+
var obj = new ValidTriangleNumber();
35+
println(obj.triangleNumber(new int[] {2, 2, 3, 4})); // 3
36+
println(obj.triangleNumber(new int[] {4, 2, 3, 4})); // 4
37+
}
38+
}

0 commit comments

Comments
 (0)