611. 有效三角形的个数 - 力扣(LeetCode)
思路:
- 双指针思想,先将数据排序
- 然后先固定最大的数Max,也就是数组最后的数
- 再定义一左一右两个下标 left 、 right,当这个值相加大于最大的数,那么他两之间所有的数和right相加都大于Max,记录下值,right-- 再进行比较。
- 要是小于Max的话 left++,再进行比较
代码:
public int triangleNumber(int[] nums) {
//先将数组排序
Arrays.sort(nums);
//求出数组长度
int n = nums.length;
int ret = 0;
//由于数三元组,所以 i >= 2 即可
for(int i = n-1; i >= 2; i--){
//定义双指针
int left = 0;
int right = i-1;
while(left < right){
//当相加大于最大值时
if(nums[left] + nums[right] > nums[i]){
ret += right-left;
right--;
}else{
left++;
}
}
}
return ret;
}