| 123456789101112131415161718192021222324252627282930 | 
							- func triangleNumber(nums []int) int {
 
- 	n, cnt := len(nums), 0
 
- 	sort.Ints(nums)
 
- 	m := make(map[int]int)
 
- 	for i := 0; i < n-2; i++ {
 
- 		for j := i + 1; j < n-1; j++ {
 
- 			sum := nums[i] + nums[j]
 
- 			if v, ok := m[sum]; ok {
 
- 				if j < v {
 
- 					cnt += v - j - 1
 
- 				}
 
- 			} else {
 
- 				beg, end := j, n-1 // Not j+1, but j
 
- 				for beg <= end {
 
- 					mid := beg + (end-beg)/2
 
- 					if nums[mid] < sum {
 
- 						beg = mid + 1 // So beg is the first idx that >= sum
 
- 					} else {
 
- 						end = mid - 1
 
- 					}
 
- 				}
 
- 				m[sum] = beg
 
- 				if j < beg {
 
- 					cnt += beg - j - 1
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	return cnt
 
- }
 
 
  |