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].
Subscribe to see which companies asked this question.
Solution:
class Solution {
public:
struct Node{
int pos;
int value;
};
static bool greatermark(const Node& s1,const Node& s2)
{
return s1.value<s2.value;
}
vector<int> twoSum(vector<int>& nums, int target)
{
vector<Node> NewNum;
bool is_negative = false;
//将数据导入到新建列表
for (int i=0; i<nums.size(); i++)
{
Node node;
node.pos = i;
node.value = nums[i];
if(0>nums[i])
is_negative = true;
NewNum.push_back(node);
}
//sort
sort(NewNum.begin(), NewNum.end(), greatermark);
vector<int> temp;
if(is_negative)
{
for(int i = 0; i < NewNum.size()-1; i++)
{
for(int j = i+1; j < NewNum.size(); j++)
{
if(0==temp.size() && target == NewNum[i].value+NewNum[j].value)
{
temp.push_back(NewNum[i].pos);
temp.push_back(NewNum[j].pos);
return temp;
}
}
}
}
else
{
//get keyPoint
int loopPos(-1);
for (int i=0; i<NewNum.size(); i++)
{
if(target < NewNum[i].value)
{
loopPos = i+1;
break;
}
}
if (-1 == loopPos)
loopPos = NewNum.size();
for(int i = 0; i < loopPos-1; i++)
{
for(int j = loopPos; j > i; j--)
{
if(0==temp.size() && target == NewNum[i].value+NewNum[j].value)
{
temp.push_back(NewNum[i].pos);
temp.push_back(NewNum[j].pos);
return temp;
}
}
}
}
return temp;
}
};