「LeetCode」0001-Two Sum(Ruby)
阿新 • • 發佈:2018-11-29
題意與分析
題意直接給出來了:給定一個數,返回陣列中和為該數(下為\(x\))的兩個數的下標。
這裡有一個顯然的\(O(n)\)的實現:建立一個hash表,每次讀入數(記作\(p\))的時候查詢hash表中有沒有\(x-p\),如果有,分別輸出其下標;否則將\(p\)插入hash表。
Ruby 相關語法
函式(方法)定義
和Python差不多。值得注意的是,Ruby中的方法是總有返回值的:最後一個語句的值。硬點也可以,使用return
。
Hash表
hash表可以像Python那樣定義,也可以像h = Hash.new
一樣被定義。用法差不多。
迭代器
Ruby使用迭代器來遍歷一個“集合”。這裡用到的是each_with_index
enumerate
差不多。迭代器的用法具體是這樣的:
(collection).each do |variable|
# code...
end
each這個迭代器的工作是遍歷每個元素。類似的還有這些迭代器:
x.times
,x為一個數字,遍歷\([0,x-1]\)x.upto(y)
遍歷\([x,y]\)(controller).step(x)
使得迭代的步長為\(x\)"a\ngood\n\day\n".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