该问题和编程之美中的相似问题有所区别,编程之美中是要返回具体的两个值,而该题是要返回两个标志。
所以不能先行排序将之处理为有序序列。
尝试采用map将数值和标志位进行关联。出现问题:向量中的值有可能是重复的!这也是做哈希要考虑的一个问题,有冲突。
参考的网上的方法,用结构体来建立数组值和下标的关系:
struct Node { int num, pos; }; bool cmp(Node a, Node b) { return a.num < b.num; } class Solution { public: vector<int> twoSum(vector<int> &numbers, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<int> result; vector<Node> array; for (int i = 0; i < numbers.size(); i++) { Node temp; temp.num = numbers[i]; temp.pos = i; array.push_back(temp); } sort(array.begin(), array.end(), cmp); for (int i = 0, j = array.size() - 1; i != j;) { int sum = array[i].num + array[j].num; if (sum == target) { if (array[i].pos < array[j].pos) { result.push_back(array[i].pos + 1); result.push_back(array[j].pos + 1); } else { result.push_back(array[j].pos + 1); result.push_back(array[i].pos + 1); } break; } else if (sum < target) { i++; } else if (sum > target) { j--; } } return result; } };