范成城

一个php开发者,一个普通科密

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

算法研究:TwoSum

算法说明:

给定一个int型数组num,和一个数字target,找出num数组里两个数字相加等于target,返回这两个数字的键值。

example:

给定数组nums = [2, 7, 11, 15], 数字target = 9,
因为nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

 

golang解决:

一次遍历,时间复杂度O(n)

func twoSum(nums []int, target int) []int {
    var result []int
    result = make([]int, 2)
    var maps map[int]int
    maps = make(map[int]int)
    var res int
    for key, val := range nums {
        res = target - val
        if v, ok := maps[res]; ok {
            result[0] = v
            result[1] = key
            return result
        }
        maps[val] = key
    }
    return result
}

Java解决:

public int[] twoSum(int[] numbers, int target) {
    int[] result = new int[2];
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    for (int i = 0; i < numbers.length; i++) {
        if (map.containsKey(target - numbers[i])) {
            result[1] = i + 1;
            result[0] = map.get(target - numbers[i]);
            return result;
        }
        map.put(numbers[i], i + 1);
    }
    return result;
}

C++解决:

vector<int> twoSum(vector<int> &numbers, int target)
{
    //Key is the number and value is its index in the vector.
    unordered_map<int, int> hash;
    vector<int> result;
    for (int i = 0; i < numbers.size(); i++) {
        int numberToFind = target - numbers[i];

            //if numberToFind is found in map, return them
        if (hash.find(numberToFind) != hash.end()) {
                    //+1 because indices are NOT zero based
            result.push_back(hash[numberToFind] + 1);
            result.push_back(i + 1);            
            return result;
        }

            //number was not found. Put it in the map.
        hash[numbers[i]] = i;
    }
    return result;
}

 

posted on 2017-01-14 22:30  范成城  阅读(124)  评论(0)    收藏  举报