题意与分析
题意直接给出来了:给定一个数,返回数组中和为该数(下为(x))的两个数的下标。
这里有一个显然的(O(n))的实现:建立一个hash表,每次读入数(记作(p))的时候查询hash表中有没有(x-p),如果有,分别输出其下标;否则将(p)插入hash表。
Ruby 相关语法
函数(方法)定义
和Python差不多。值得注意的是,Ruby中的方法是总有返回值的:最后一个语句的值。硬点也可以,使用return
。
Hash表
hash表可以像Python那样定义,也可以像h = Hash.new
一样被定义。用法差不多。
迭代器
Ruby使用迭代器来遍历一个“集合”。这里用到的是each_with_index
,和Python中的enumerate
差不多。
迭代器的用法具体是这样的:
(collection).each do |variable|
# code...
end
each这个迭代器的工作是遍历每个元素。类似的还有这些迭代器:
x.times
,x为一个数字,遍历([0,x-1])x.upto(y)
遍历([x,y])(controller).step(x)
使得迭代的步长为(x)"a good day ".each_line
遍历字符串中的每一行。
判断语句
Ruby有三种判断语句:
if
语句if-else
语句if-else-if(elsif)
语句- 三元(缩写
if
语句)语句
用法和python是类似的,不同的只有elseif:elsif
而非elif
。
比较有趣的类似Perl的一个语法是这样的:a=10 if a>5
。
代码
# @param {Integer[]} nums
# @param {Integer} target
# @return {Integer[]}
def two_sum(nums, target)
search = Hash.new
nums.each_with_index do |val, idx|
i=search[target-val]
return [i, idx] if i!=nil
search[val]=idx
end
end