Problem:
Solution:
题目要求是在给定数组中找出num1+num2=target的num1和num2的下标index,且假设对于每个输入的target只有一组nums的和与之对应,同一个元素不得使用两次。
Edition1:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
vector<int> ss;
for (int i = 0;i < numbers.size();i++)
{
for (int j = 0; j < numbers.size(); j++)
{
if (numbers[i] + numbers[j] == target && j != i)
{
ss.push_back(i+1);
ss.push_back(j+1);
return ss;
}
}
}
}
};
虽然题中对时间复杂度并没有做出要求,但是此方法在数据量很大时还是超出了时间限制,虽然只有一个case没有通过。
其实原因很简单,题目中给定的数组是按升序排列的,因此在O(n)时间内即可实现查找
Edition2:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int low = 0;
int high = numbers.size()-1;
vector<int> result;
while(numbers[low] + numbers[high] != target)
{
if(numbers[low] + numbers[high] < target)
{
low++;
}
else high--;
}
result.push_back(low+1);
result.push_back(high+1);
return result;
}
};