|
发表于 2024-2-2 19:42:25
|
显示全部楼层
是的,双指针技巧可以帮助你在数组中快速找到目标数。双指针技巧适用于一些特定的问题,例如查找两个数之和等于目标数、查找数组中是否存在重复元素等。
例如,我们来看一个示例代码,在一个已排序的数组中查找两个数之和等于目标数的情况:
- #include <iostream>
- #include <vector>
- using namespace std;
- vector<int> twoSum(vector<int>& nums, int target) {
- vector<int> result;
- int left = 0;
- int right = nums.size() - 1;
-
- while (left < right) {
- int sum = nums[left] + nums[right];
- if (sum == target) {
- // 找到了目标数对,将两个数的索引加入结果数组中
- result.push_back(left);
- result.push_back(right);
- break;
- } else if (sum < target) {
- // 当前和小于目标数,左指针向右移动
- left++;
- } else {
- // 当前和大于目标数,右指针向左移动
- right--;
- }
- }
-
- return result;
- }
- int main() {
- vector<int> nums = {2, 7, 11, 15};
- int target = 9;
-
- vector<int> result = twoSum(nums, target);
- if (result.size() == 2) {
- cout << "两个数的索引分别为:" << result[0] << ", " << result[1] << endl;
- } else {
- cout << "未找到符合条件的数对" << endl;
- }
-
- return 0;
- }
复制代码
上述示例代码中,我们使用了两个指针left和right,分别指向数组的开头和结尾。通过不断调整指针的位置,当找到两个数之和等于目标数时,即可返回结果。这种方式可以快速找到目标数,同时避免使用嵌套循环的低效率解法。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|