思路:相当于三数相加的一个变种
Code:
class Solution {
public int triangleNumber(int[] nums) {
int count = 0;
if (nums == null || nums.length < 3) {
return count;
}
//先把无序数组排序 nlogn
//[-4, -1, -1, 0, 1, 2]
Arrays.sort(nums);
for (int c = nums.length - 1; c > 1; c--) {
//a 从0开始遍历
int a = 0;
//从c的前一个开始遍历
int b = c - 1;
while (a < b) {
//c>b>a 这个是永远成立的
//所以 nums[a] + nums[c] > nums[b] && nums[b] + nums[c] > nums[a] 永远为true
if (nums[a] + nums[b] > nums[c] ) {
//记录结果
count += (b-a);
//移位
b--;
//去除重复
}else {
//不满足就a++
a++;
}
}
}
return count;
}
}