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