美文网首页
[Array] 1. Two Sum

[Array] 1. Two Sum

作者: HitNoah | 来源:发表于2017-05-25 22:34 被阅读21次

LeetCode Link

Problem Description

Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.

Idea

思路就是用个Hash,缓存每个数字的index
注意这里如果无脑直接缓存的话有个小陷阱,测试用例会给类似[3,3] 6这种,于是如果一开始就更新index,那么会覆盖掉一个相同的element的index

Solution

Solution 1

# @param {Integer[]} nums
# @param {Integer} target
# @return {Integer[]}
def two_sum(nums, target)
    # because each input would have exactly one solution, so we do
    # no check the only-one-element situation
    table = Hash.new
    table[nums[0]] = 0
    nums.each_with_index do |num, index|
        unless table[target - num].nil? then
            unless index == table[target-num]
                low_index = [index, table[target-num]].min
                high_index = [index, table[target-num]].max
                return [low_index, high_index]
            end
        end
        table[num] = index # problem, same value will have hash confilct
    end
end

Solution 2: more ruby

def two_sum(numbers, target)
    hash = numbers.map.with_index.to_h
    found = numbers.find.with_index do |n, index| 
      target_index = hash[target - n] and target_index != index
    end
    [numbers.index(found), hash[target - found]].sort
end

个人感觉这个solution的缺点在于,需要把nums全部map

Review

相关文章

网友评论

      本文标题:[Array] 1. Two Sum

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