public int triangleNumber(int[] nums) {
int n = nums.length;
Arrays.sort(nums);
int ret = 0;
for (int i = 0; i < n; i++) {
// nums[i] 为第一条边 a
for (int j = i + 1; j < n; j++) {
// nums[j] 为第二条边 b
int left = j + 1, right = n - 1, pos = j;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] < nums[i] + nums[j]) {
pos = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
ret += pos - j;
}
}
return ret;
}