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
思路就是用個(gè)Hash,緩存每個(gè)數(shù)字的index
注意這里如果無腦直接緩存的話有個(gè)小陷阱,測(cè)試用例會(huì)給類似[3,3] 6
這種,于是如果一開始就更新index,那么會(huì)覆蓋掉一個(gè)相同的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
個(gè)人感覺這個(gè)solution的缺點(diǎn)在于,需要把nums全部map