标签:
问题链接:https://leetcode.com/problems/two-sum/
解法1:50ms
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> copy = nums; quicksort(copy, 0, nums.size() - 1); vector<int>::iterator index1 = copy.begin(), index2 = copy.end() - 1; while ((*index1 + *index2 ) != target) { if ((*index1 + *index2) < target) ++index1; if ((*index1 + *index2) > target) --index2; } int value1 = *index1, value2 = *index2; int i1 = 0, i2 = 0; for (index1 = nums.begin();index1 != nums.end();++index1) { if (*index1 == value1 || *index1 == value2) { if (!i1) i1 = index1 - nums.begin() + 1; else { i2 = index1 - nums.begin() + 1; break; } } } vector<int> result; result.push_back(i1); result.push_back(i2); return result; } void quicksort(vector<int>& nums, int front, int behind) { int f = front + 1, b = behind, temp; if (front >= behind) return; while (f != b) { if (nums[f] > nums[front]) { temp = nums[f]; nums[f] = nums[b]; nums[b] = temp; --b; } else ++f; } if (nums[f] > nums[front]) --f; temp = nums[front]; nums[front] = nums[f]; nums[f] = temp; quicksort(nums, front, f - 1); quicksort(nums, f + 1, behind); } };
解法2:24ms
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { map<int, int> value_index; vector<int> result; map<int, int>::iterator iter; int i = 0; for (i = 0;i < nums.size();++i) { iter = value_index.find(target - nums[i]); if (iter != value_index.end()) { result.push_back(iter->second); result.push_back(i + 1); break; } else value_index.insert(pair<int, int>(nums[i], i + 1)); } return result; } };
解法3:12ms
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> copy = nums; vector<int> result; sort(copy.begin(), copy.end()); int f = 0, b = copy.size() - 1; while ((copy[f] + copy[b]) != target) { if ((copy[f] + copy[b]) < target) { ++f; } if ((copy[f] + copy[b] > target)) { --b; } } int i = 0, index1 = 0, index2 = 0; for (i = 0;i < nums.size();++i) { if ((nums[i] == copy[f]) || nums[i] == copy[b]) { if (!index1) { index1 = i + 1; } else { index2 = i + 1; break; } } } result.push_back(index1); result.push_back(index2); return result; } };
标签:
原文地址:http://my.oschina.net/u/2313065/blog/523091