leetcode two sum python 实现

leetcode two sum python 实现Two Sum LeetCode 先百度了一下 看一个解法总感觉有那么些看不懂和复杂 http www cnblogs com dollarzhaole archive 2013 06 24 3152962 html Given an array of integers find two numbers such that they

大家好,我是讯享网,很高兴认识大家。

Two Sum-----LeetCode

先百度了一下,看一个解法总感觉有那么些看不懂和复杂.

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.


讯享网

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

 

解题思路:

(1)O(nlogn)。排序,然后两个指针一前一后。因为题中说明了只有一对答案,因此不需要考虑重复的情况。

(2)O(n)。哈希表。将每个数字放在map中,历遍数组,如果出现和数组中的某一个值相加为target的时候,break。这个方法同样适用于多组解的情况。

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; } };

讯享网
懒的建工程,就用python写了一个

讯享网def twosum(array, target): alen = len(array) for i in range(alen): for j in range(i + 1, alen): if (array[i] + array[j] == target): return i, j return 0, 0 arr = [2, 7, 11, 15, 1, 3, 53, 245] print twosum(arr, 56)


小讯
上一篇 2025-02-17 21:40
下一篇 2025-02-15 22:13

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/50481.html