这道题实际上跟本专栏上一题属于同一类型,是上一题的简单版,可以点击跳跃。
有效三角形的个数【双指针】
法一:暴力求解
class Solution
{
public:
vector<int> twoSum(vector<int> &nums, int target)
{
int n = nums.size();
for (int i = 0; i < n; i++)
{
// 第⼀层循环从前往后列举第⼀个数
for (int j = i + 1; j < n; j++)
{ // 第⼆层循环从 i 位置之后列举第⼆个数
if (nums[i] + nums[j] == target) // 两个数的和等于目标值 已经找到结果
return {nums[i], nums[j]};
}
}
return {-1, -1};
}
};
对撞指针:思路和上篇一致
class Solution
{
public:
vector<int> twoSum(vector<int> &nums, int target)
{
int left = 0, right = nums.size() - 1;
while (left < right)
{
int sum = nums[left] + nums[right];
if (sum > target)
right--;
else if (sum < target)
left++;
else
return {nums[left], nums[right]};
}
return {-1, -1};
}
};