Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 634e64c

Browse files
feat: add solutions to lc problem: No.0611.Valid Triangle Number
1 parent ba6cc98 commit 634e64c

File tree

4 files changed

+160
-4
lines changed

4 files changed

+160
-4
lines changed

‎solution/0600-0699/0611.Valid Triangle Number/README.md‎

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<strong>输入:</strong> [2,2,3,4]
1515
<strong>输出:</strong> 3
1616
<strong>解释:</strong>
17-
有效的组合是:
17+
有效的组合是:
1818
2,3,4 (使用第一个 2)
1919
2,3,4 (使用第二个 2)
2020
2,2,3
@@ -32,22 +32,82 @@
3232

3333
<!-- 这里可写通用的实现逻辑 -->
3434

35+
双指针加二分,先枚举两条边,然后利用二分查找定位第三条边
36+
3537
<!-- tabs:start -->
3638

3739
### **Python3**
3840

3941
<!-- 这里可写当前语言的特殊实现逻辑 -->
4042

4143
```python
42-
44+
class Solution:
45+
def triangleNumber(self, nums: List[int]) -> int:
46+
n = len(nums)
47+
nums.sort()
48+
ans = 0
49+
for i in range(0, n - 2):
50+
for j in range(i + 1, n - 1):
51+
left, right = j + 1, n
52+
while left < right:
53+
mid = left + (right - left) // 2
54+
if nums[mid] < nums[i] + nums[j]:
55+
left = mid + 1
56+
else:
57+
right = mid
58+
ans += left - j - 1
59+
return ans
4360
```
4461

4562
### **Java**
4663

4764
<!-- 这里可写当前语言的特殊实现逻辑 -->
4865

4966
```java
67+
class Solution {
68+
public int triangleNumber(int[] nums) {
69+
Arrays.sort(nums);
70+
int n = nums.length;
71+
int res = 0;
72+
for (int i = n - 1; i >= 2; --i) {
73+
int l = 0, r = i - 1;
74+
while (l < r) {
75+
if (nums[l] + nums[r] > nums[i]) {
76+
res += r - l;
77+
--r;
78+
} else {
79+
++l;
80+
}
81+
}
82+
}
83+
return res;
84+
}
85+
}
86+
```
5087

88+
### **Go**
89+
90+
```go
91+
func triangleNumber(nums []int) int {
92+
n := len(nums)
93+
sort.Ints(nums)
94+
ans := 0
95+
for i := 0; i < n-2; i++ {
96+
for j := i + 1; j < n-1; j++ {
97+
left, right := j+1, n
98+
for left < right {
99+
mid := int(uint(left+right) >> 1)
100+
if nums[mid] < nums[i]+nums[j] {
101+
left = mid + 1
102+
} else {
103+
right = mid
104+
}
105+
}
106+
ans += left - j - 1
107+
}
108+
}
109+
return ans
110+
}
51111
```
52112

53113
### **...**

‎solution/0600-0699/0611.Valid Triangle Number/README_EN.md‎

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Given an array consists of non-negative integers, your task is to count the num
1818

1919
<b>Explanation:</b>
2020

21-
Valid combinations are:
21+
Valid combinations are:
2222

2323
2,3,4 (using the first 2)
2424

@@ -48,18 +48,78 @@ Valid combinations are:
4848

4949
## Solutions
5050

51+
First enumerate two edges, and then use binary search to locate the third edge.
52+
5153
<!-- tabs:start -->
5254

5355
### **Python3**
5456

5557
```python
56-
58+
class Solution:
59+
def triangleNumber(self, nums: List[int]) -> int:
60+
n = len(nums)
61+
nums.sort()
62+
ans = 0
63+
for i in range(0, n - 2):
64+
for j in range(i + 1, n - 1):
65+
left, right = j + 1, n
66+
while left < right:
67+
mid = left + (right - left) // 2
68+
if nums[mid] < nums[i] + nums[j]:
69+
left = mid + 1
70+
else:
71+
right = mid
72+
ans += left - j - 1
73+
return ans
5774
```
5875

5976
### **Java**
6077

6178
```java
79+
class Solution {
80+
public int triangleNumber(int[] nums) {
81+
Arrays.sort(nums);
82+
int n = nums.length;
83+
int res = 0;
84+
for (int i = n - 1; i >= 2; --i) {
85+
int l = 0, r = i - 1;
86+
while (l < r) {
87+
if (nums[l] + nums[r] > nums[i]) {
88+
res += r - l;
89+
--r;
90+
} else {
91+
++l;
92+
}
93+
}
94+
}
95+
return res;
96+
}
97+
}
98+
```
6299

100+
### **Go**
101+
102+
```go
103+
func triangleNumber(nums []int) int {
104+
n := len(nums)
105+
sort.Ints(nums)
106+
ans := 0
107+
for i := 0; i < n-2; i++ {
108+
for j := i + 1; j < n-1; j++ {
109+
left, right := j+1, n
110+
for left < right {
111+
mid := int(uint(left+right) >> 1)
112+
if nums[mid] < nums[i]+nums[j] {
113+
left = mid + 1
114+
} else {
115+
right = mid
116+
}
117+
}
118+
ans += left - j - 1
119+
}
120+
}
121+
return ans
122+
}
63123
```
64124

65125
### **...**
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func triangleNumber(nums []int) int {
2+
n := len(nums)
3+
sort.Ints(nums)
4+
ans := 0
5+
for i := 0; i < n-2; i++ {
6+
for j := i + 1; j < n-1; j++ {
7+
left, right := j+1, n
8+
for left < right {
9+
mid := int(uint(left+right) >> 1)
10+
if nums[mid] < nums[i]+nums[j] {
11+
left = mid + 1
12+
} else {
13+
right = mid
14+
}
15+
}
16+
ans += left - j - 1
17+
}
18+
}
19+
return ans
20+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def triangleNumber(self, nums: List[int]) -> int:
3+
n = len(nums)
4+
nums.sort()
5+
ans = 0
6+
for i in range(0, n - 2):
7+
for j in range(i + 1, n - 1):
8+
left, right = j + 1, n
9+
while left < right:
10+
mid = left + (right - left) // 2
11+
if nums[mid] < nums[i] + nums[j]:
12+
left = mid + 1
13+
else:
14+
right = mid
15+
ans += left - j - 1
16+
return ans

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /