题目:
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.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
思路:
题目的意思还是比较好理解的,找一数组内的两个元素,这两个元素的和等于target。
方法思想:拷贝该数组,对拷贝的数组从小到大排序,设两个“指针”分别指向该数组头和尾,如果两者之和大于target,尾指针向前滑,小于target则头指针向右滑,直到找到满足条件的两个数。
代码:
class Solution
{
public:
vector<int> twoSum(vector<int>& nums, int target)
{
// Note: The Solution object is instantiated only once and is reused by each test case.
vector<int> num = nums;
std::sort(num.begin(), num.end());
int length = nums.size();
int left = 0;
int right = length - 1;
int sum = 0;
vector<int> index;
while (left < right)
{
sum = num[left] + num[right];
if (sum == target)
{
// find the index from the old array
for (int i = 0; i < length; ++i)
{
if (nums[i] == num[left])
{
index.push_back(i);
}
else if (nums[i] == num[right])
{
index.push_back(i);
}
if (index.size() == 2)
{
break;
}
}
break;
}
else if (sum > target)
{
--right;
}
else
{
++left;
}
}
return index;
}
};