LeetCode: Two Sum
2013-04-22 08:10
399 查看
坑爹的多数次过。。
后来写了另外一段代码,更清楚点
C#
View Code
class Solution { public: vector<int> twoSum(vector<int> &numbers, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function int left = 0; int right = numbers.size() - 1; vector<int> ret; map<int, vector<int>> S; for (int i = 0; i < numbers.size(); i++) S[numbers[i]].push_back(i+1); sort(numbers.begin(), numbers.end()); while (left < right) { if (numbers[left] + numbers[right] == target) { if (S[numbers[left]].size() > 1) { ret.push_back(S[numbers[left]][0]); ret.push_back(S[numbers[right]][1]); return ret; } int a = S[numbers[left]][0]; int b = S[numbers[right]][0]; if (a > b) { ret.push_back(b); ret.push_back(a); } else { ret.push_back(a); ret.push_back(b); } return ret; } if (numbers[left] + numbers[right] < target) left++; else right--; } } };
后来写了另外一段代码,更清楚点
class Solution { public: vector<int> twoSum(vector<int> &numbers, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function map<int, int> S; for (int i = 0; i < numbers.size(); i++) S[i+1] = numbers[i]; sort(numbers.begin(), numbers.end()); int left = 0; int right = numbers.size()-1; while (left < right) { int sum = numbers[left] + numbers[right]; if (sum == target) break; if (sum < target) left++; else right--; } vector<int> ret; int first, second; first = second = 0; for (map<int, int>::iterator it = S.begin(); it != S.end(); it++) { if (numbers[left] == it->second || numbers[right] == it->second) { if (!first) first = it->first; else second = it->first; } } if (first > second) swap(first, second); ret.push_back(first); ret.push_back(second); return ret; } };
C#
public class Solution { public int[] TwoSum(int[] nums, int target) { Dictionary<int, int> S = new Dictionary<int, int>(); for (int i = 0; i < nums.Length; i++) S.Add(i+1, nums[i]); Array.Sort(nums); int left = 0, right = nums.Length-1; while (left < right) { int sum = nums[left] + nums[right]; if (sum == target) break; if (sum < target) left++; else right--; } int[] ans = new int[2]; int first = 0, second = 0; foreach (var v in S) { if (nums[left] == v.Value || nums[right] == v.Value) { if (first == 0) first = v.Key; else second = v.Key; } } if (first > second) { int tmp = first; first = second; second = tmp; } ans[0] = first; ans[1] = second; return ans; } }
View Code
相关文章推荐
- 【leetcode with java】1 Two Sum
- leetCode Two Sum
- LeetCode ---2.Two Sum
- LeetCode--No.1--Two Sum
- Leetcode题目分析 1.Two Sum
- [leetcode]Two Sum
- 【LeetCode】1.Two Sum
- 和大神们学习每天一题(leetcode)-Two Sum
- leetcode编程题(1)Two Sum
- LeetCode-1. Two Sum
- LeetCode 1. Two Sum
- LeetCode 001-Two Sum
- LeetCode 之 Two Sum
- Leetcode--Two Sum
- [LeetCode] 1 Two Sum
- leetcode 1, Two Sum
- LeetCode----Two Sum
- LeetCode之Two Sum
- leetcode-two Sum
- [LeetCode]Two Sum