题目:
给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。
解法:
先排序,然后二分查找
import "sort"
func triangleNumber(nums []int) int {
sort.Ints(nums)
ans := 0
for i := 0; i < len(nums); i ++ {
for j := i+1; j < len(nums) ; j ++ {
k := j
l, r := j + 1 , len(nums) - 1
for l <= r {
mid := (l + r) / 2
if nums[mid] < nums[i] + nums[j] {
k = mid
l = mid + 1 // index <= mid的位置都满足条件,左右要向右搜索最后一个满足条件的位置
} else {
r = mid - 1
}
}
ans += k - j
}
}
return ans
}