美文网首页
LeetCode 167. Two Sum II - Input

LeetCode 167. Two Sum II - Input

作者: 洛丽塔的云裳 | 来源:发表于2020-05-07 23:33 被阅读0次

    0.前言

    Given an array of integers that is already sorted in ascending order, 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.
    Note:
    Your returned answers (both index1 and index2) are not zero-based.

    You may assume that each input would have exactly one solution and you may not use the same element twice.

    1. c++ 版本

    方法1:使用双指针

    class Solution {
    public:
        vector<int> twoSum(vector<int>& numbers, int target) {
            vector<int> res;
            for (int i=0, j=numbers.size()-1; i < j; ) {
                if (target < numbers[i] + numbers[j])
                    --j;
                else if (target > numbers[i] + numbers[j])
                    ++i;
                else {
                    res.push_back(i+1);
                    res.push_back(j+1);
                    break;
                }
            }
            return res;
        }
    };
    

    方法2:借助map,然后进行find

    class Solution {
    public:
        vector<int> twoSum(vector<int>& numbers, int target) {
            vector<int> res;
            map<int, int> per_num;
            map<int, int>::iterator iter;
            for (int i=0; i<numbers.size(); ++i) {
                iter = per_num.find(target - numbers[i]);
                if (iter != per_num.end()) {
                    res.push_back(iter->second);
                    res.push_back(i+1);
                    break;
                }
                per_num.insert(make_pair(numbers[i], i+1));
            }
            return res;
        }
    };
    

    2. python 版本

    class Solution(object):
        def twoSum(self, numbers, target):
            """
            :type numbers: List[int]
            :type target: int
            :rtype: List[int]
            """
            res = []
            i, j = 0, len(numbers)-1
            while i < j:
                if target > numbers[i] + numbers[j]:
                    i = i+1
                elif target < numbers[i] + numbers[j]:
                    j = j-1
                else:
                    res.append(i+1)
                    res.append(j+1)
                    break
            return res
    

    相关文章

      网友评论

          本文标题:LeetCode 167. Two Sum II - Input

          本文链接:https://www.haomeiwen.com/subject/lyptnhtx.html