题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum
题解:双指针算法
//头文件
#include #include#include#include #include #include //命名空间
using namespace std;//Solution类,两数相加函数是类的成员函数
class Solution {
public:vector twoSum(vector& nums, int target);//成员函数在类内的声明
};//成员函数在类外的具体实现
//成员函数在类外实现要使用Solution::twoSum,函数名之前要加Solution::表明所属的类
vector Solution::twoSum(vector& nums, int target) {int n = nums.size(); //构造数组的索引数组idxs vector idxs;for(int i = 0; i < n; i++)idxs.push_back(i);//对数组进行升序排序sort(idxs.begin(),idxs.end(),[nums,idxs](int i, int j) {return nums[idxs[i]] < nums[idxs[j]];});//定义首尾指针int l = 0, r = n-1;//定义ret数组用于存放返回值,即和为target的两数组元素的下标vector ret;//比较首尾指针指向元素和与target值并针对三种情况进行相应处理while (l < r){int sum = nums[idxs[l]] + nums[idxs[r]];if(sum == target){ret.push_back(idxs[l]);ret.push_back(idxs[r]);break;} else if (sum < target){l++;} else {r--;}}return ret;
}//定义一个Solution类
Solution s;//整型数组转字符串汉纳树
string integerVectorToString(vector list, int length = -1) {if (length == -1) {length = list.size();}if (length == 0) {return "[]";}string result;for(int index = 0; index < length; index++) {int number = list[index];result += to_string(number) + ", ";}return "[" + result.substr(0, result.length() - 2) + "]";
}//主函数
int main(){//示例数组与target值vectornums={3,2,4};int target = 6;//调用twosum函数并将结果返回给ret数组vector result = s.twoSum(nums,target);//将整型数组元素转换为string类型string out = integerVectorToString(result);//输出结果cout << out <
上一篇:不要怀疑我 英文怎么说
下一篇:怀孕8个月应如何进行胎教