代码 1 排序 + 二分:
sort.SearchInts(a []int, b int) SearchInts在递增顺序的a中搜索x,返回x的索引。如果查找不到,返回值是x应该插入a的位置(以保证a的递增顺序),返回值可以是len(a)。
func triangleNumber(nums []int) (ans int) {
sort.Ints(nums)
for i, v := range nums {
for j := i + 1; j < len(nums); j++ {
ans += sort.SearchInts(nums[j+1:], v+nums[j])
}
}
return
}
代码 2 排序 + 双指针
j , k 就是两个一直递增的指针,在 i 不变的情况下
func triangleNumber(nums []int) (ans int) {
n := len(nums)
sort.Ints(nums)
for i, v := range nums {
k := i
for j := i + 1; j < n; j++ {
for k+1 < n && nums[k+1] < v+nums[j] {
k++
}
ans += max(k-j, 0)
}
}
return
}
func max(a, b int) int {
if a > b {
return a
}
return b
}