1. 题目描述
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
2. 解决思路
这道题比较简单,解题思路也很容易想到,就是将数组排序以后利用数组头尾的元素相加与目标值作比较的结果,来动态移动头或者尾的下标,进而逐渐向数组中间靠拢。这样一来就只遍历了数组一遍,时间复杂度为O(n),而数组 排序的时间复杂度为O(nlogn),所以最后的时间复杂度为O(nlogn)。
3. 完整代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> nums;
int target = 0;
int temp = 0;
cout << "请输入整数nums的各元素(请用非int类型字符结束数组输入):" << endl;
while(cin >> temp)
{
nums.push_back(temp);
}
sort(nums.begin(), nums.end());
cout << "请输入目标值:" << endl;
cin >> target;
for (int i = 0, j = nums.size() - 1; i <= j;)
{
if (nums[i] + nums[j] > target){
j--;
}
else if (nums[i] + nums[j] < target)
{
i++;
}else
{
cout << "两元素之和等于目标值的索引是[" << i << "," << j << "]" << endl;
break;
}
}
return 0;
}