⬆︎
×

[LC] 0001 Two Sum

Java

import java.util.*;

/**
 * <a href="https://leetcode-cn.com/problems/two-sum/">Two Sum</a>
 */
class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(target - nums[i])) {
                return new int[]{i, map.get(target - nums[i])};
            }
            map.put(nums[i], i);
        }
        return new int[]{0, 0};
    }
}

C++

#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> res;
        unordered_map<int, bool> flag;
        unordered_map<int, int> idx;
        for (int i = 0; i < nums.size(); ++i) {
            flag[nums[i]] = true;
            idx[nums[i]] = i;
        }

        for (int i = 0; i < nums.size(); ++i) {
            if (flag[target - nums[i]] && idx[target - nums[i]] != i) {
                res.push_back(i);
                res.push_back(idx[target - nums[i]]);
                break;
            }
        }

        return res;
    }
};

Go

func twoSum(nums []int, target int) []int {
    // 使用map
    m := make(map[int]int)
    for i, num := range nums {
        if j, ok := m[target-num]; ok {
            return []int{j, i}
        }
        m[num] = i
    }
    return nil
}

JavaScript

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (nums, target) {
    let map = new Map();
    for (let i = 0; i < nums.length; i++) {
        if (map.has(target - nums[i])) {
            return [map.get(target - nums[i]), i];
        }
        map.set(nums[i], i);
    }
    return [0, 0];
};

PHP

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum(array $nums, int $target): array {
        $map = array();
        for ($i = 0; $i < count($nums); $i++) {
            if (isset($map[$target - $nums[$i]])) {
                return [$i, $map[$target - $nums[$i]]];
            }
            $map[$nums[$i]] = $i;
        }
        return [0, 0];
    }
}

Python

class Solution(object):
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # 遍历列表
        for i in range(len(nums)):
            # 计算需要找到的下一个目标数字
            res = target-nums[i]
                # 遍历剩下的元素,查找是否存在该数字
            if res in nums[i+1:]:
                # 若存在,返回答案。这里由于是两数之和,可采用.index()方法
                # 获得目标元素在nums[i+1:]这个子数组中的索引后,还需加上i+1才是该元素在nums中的索引
                return [i, nums[i+1:].index(res)+i+1]

发表评论