| 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}
 |