1. 程式人生 > >「LeetCode」0001-Two Sum(Ruby)

「LeetCode」0001-Two Sum(Ruby)

題意與分析

題意直接給出來了:給定一個數,返回陣列中和為該數(下為\(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\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