大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
本题主要考察在一个有序数组中查找两个数的和等于目标权重的问题。
题目解答方法的文字分析
我们可以使用双指针法来解决这个问题。首先,我们在数组中使用两个指针,一个指向数组的开头(p1),一个指向数组的末尾(p2)。然后,我们计算这两个指针所指的元素之和,并与目标权重进行比较。如果和等于目标权重,那么我们就找到了符合条件的组合,返回p1和p2。如果和小于目标权重,我们将p1向右移动一步。如果和大于目标权重,我们将p2向左移动一步。重复上述步骤直到找到符合条件的组合或者p1 >= p2为止。
本题解析所用的编程语言
C++
完整且正确的编程代码
class Solution { public: vector<int> findWeightRelation(vector<int>& info, int target_weight) { int p1 = 0; // 第一个指针指向数组开头 int p2 = info.size() - 1; // 第二个指针指向数组末尾 while (p1 < p2) { int sum = info[p1] + info[p2]; if (sum == target_weight) { return {p1 + 1, p2 + 1}; // 下标从1开始,所以需要加1 } else if (sum < target_weight) { p1++; // 和小于目标权重,向右移动第一个指针 } else { p2--; // 和大于目标权重,向左移动第二个指针 } } return {-1, -1}; // 没有找到符合条件的组合 } };