leetcode-两数之和

101 阅读1分钟

双重for循环暴力解题

Java

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for(int i =0; i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    return new int[]{i,j};
                }
            }
        }
        return new int[0];
    }
}

C++

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

Go

func twoSum(nums []int, target int) []int {
    var n = len(nums)
    for i :=0;i<n;i++{
        var x =nums[i]
        for j := i+1;j<n;j++{
            if nums[j] ==target -x{
                return []int{i,j}
            }
        }
    }
    return []int{}
}

哈希表解决

Java

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> hashtable = new HashMap<Integer,Integer>();
        for(int i=0;i<nums.length;i++){
            if(hashtable.containsKey(target - nums[i])){
                return new int[]{hashtable.get(target-nums[i]),i};
            }
            hashtable.put(nums[i],i);
        }
            return new int[0];
    }
}

C++

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        std::unordered_map <int,int>map;
        for(int i=0;i<nums.size();i++){
            auto iter = map.find(target - nums[i]);
            if(iter != map.end()){
                return {iter->second,i};
            }
            map.insert(pair<int,int>(nums[i],i));
        }
        return {};
    }
};

Go

func twoSum(nums []int, target int) []int {
    m :=make(map[int]int)
    for index, val := range nums{
        if preIndex, ok := m[target-val]; ok{
            return []int {preIndex,index}
        }else{
            m[val] = index
        }
    }
    return []int{}
}