We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 661e60b commit bc42a40Copy full SHA for bc42a40
Algorithms/0611.valid-triangle-number/valid-triangle-number.go
@@ -9,14 +9,20 @@ func triangleNumber(a []int) int {
9
n := len(a)
10
11
res := 0
12
- for i := 0; i < n-2; i++ {
13
- for j := i + 1; j < n-1; j++ {
14
- for k := j + 1; k < n; k++ {
15
- if a[i]+a[j] > a[k] {
16
- res++
17
- } else {
18
- break
19
- }
+ for k := n - 1; 2 <= k; k-- {
+ for i, j := 0, k-1; i < j; {
+ // 由于 a 是递增的,保证了 a[i] <= a[j] <= a[k]
+ // 所以,只要 a[i] + a[j] > a[k]
+ // 三者就可以构成三角形
+ if a[i]+a[j] > a[k] {
+ // a[j], a[k] 和 a[i:j] 中的任意一个,都可以组成三角形
+ // a[i:j] 中元素个数是 j-i
20
+ res += j - i
21
+ // a[j] 足够长,可以变短试试看
22
+ j--
23
+ } else {
24
+ // a[i] 不够长,需要变长后,再看看
25
+ i++
26
}
27
28
0 commit comments