这道题的思路要先对数组排序,然后定义一个下标i从右往左遍历数组,我们以数组[2,2,3,4,5,9,10]为例,再定义两个指针,left,right,left指向第一个第一个元素,right指向i的前一个。
class Solution {
public:
int triangleNumber(vector<int>& nums) {
// 排序数组
sort(nums.begin(), nums.end());
// 利用双指针解决问题
int ret = 0,n = nums.size();
for (int i = n -1; i >= 2; i--)// 从左到右遍历数值
{
int left = 0, right = i - 1;
while (left < right)
{
if (nums[left] + nums[right] > nums[i])
{
ret += right - left;
right--;
}
else
{
left++;
}
}
}
return ret;
}
};