力扣 演算法習題 簡單(全ruby解法)

2021-09-28 15:04:32 字數 2712 閱讀 5678

兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。

# @param  nums

# @param target

# @return

def two_sum(nums, target)

length = nums.size()

i = 0

while i < length

j = i + 1

while j < length

if target == nums[i] + nums[j]

return [i,j]

endj += 1

endi+=1

endend

整數反轉

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。

# @param  x

# @return

def reverse(x)

if x < 0

fu = -x.to_s

return aa(-fu.reverse.to_i)

else x > 0

zh = x.to_s

return aa(zh.reverse.to_i)

end

enddef aa(x)

if x < 2147483647 && x > -2147483648

xelse

return 0

endend

獨一無二的出現次數

給你乙個整數陣列 arr,請你幫忙統計陣列中每個數的出現次數。

如果每個數的出現次數都是獨一無二的,就返回 true;否則返回 false。

def unique_occurrences(arr)

ha = hash.new(0)

arr.each do |a|

ha[a] += 1

endar = ha.values

ar.size == ar.uniq.size

end

最小絕對差

給你個整數陣列 arr,其中每個元素都 不相同。

請你找到所有具有最小絕對差的元素對,並且按公升序的順序返回。

def minimum_abs_difference(arr)

arr = arr.sort#陣列排序

length = arr.size()

i = 1

ha = hash.new(0)

while i < length

num = (arr[i - 1] - arr[i]).abs

unless ha.keys.include?(num)

ha[num] =

endha[num] += [[arr[i - 1],arr[i]]]

i += 1

endm = ha.keys.min

ha[m]

end

「氣球」 的最大數量

給你乙個字串 text,你需要使用 text 中的字母來拼湊盡可能多的單詞 「balloon」(氣球)。

字串 text 中的每個字母最多只能被使用一次。請你返回最多可以拼湊出多少個單詞 「balloon」。

ps:**有很大的優化空間。

def max_number_of_balloons(text)

flag = 0

p = false

te = text.split("")

qi = ["b","a","l","o","n"]

ci = hash.new(0)

te.each do |t|

if qi.include?(t)

ci[t] += 1

flag += 1

endend

ci["l"] = ci["l"]/2

ci["o"] = ci["o"]/2

qi.each do |q|

unless ci.include?(q)

flag = 0

endend

flag

if flag != 0

ci.values.min.round(0)

else

flag

endend

爬樓梯

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是乙個正整數。

def climb_stairs(n)

if n == 1

return 1

else

a, b, re = 1, 1, 0

while n > 1

re = a + b

b = a

a = re

n -= 1

endreturn re

endend

力扣46 全排列

給定乙個 沒有重複 數字的序列,返回其所有可能的全排列。這道題其實就是看你如何遍歷這棵搜尋樹。輸入1,2,3情況下的求解樹,如下 如果用dfs來做 第一種思路,交換 可能比較難想到 說白了每次挑乙個數字出來,為了保證不重複,我就換就行了嘛。void perm int list,int k,int m...

力扣 46 全排列

傳送門 給定乙個沒有重複數字的數列,輸入該數列的全排列。這是一道回溯法 遞迴思想 的題目,可以通過遞迴來列舉所有的排列組合,為了避免重複使用某個數字,可以用flag標記每個數字是否使用。方面,回溯法的框架如下,細品 result def backtrack 路徑,選擇列表 if滿足結束條件 resu...

力扣習題 複寫零

給你乙個長度固定的整數陣列 arr,請你將該陣列 現的每個零都複寫一遍,並將其餘的元素向右平移。注意 請不要在超過該陣列長度的位置寫入元素。要求 請對輸入的陣列 就地 進行上述修改,不要從函式返回任何東西。示例 1 輸入 1,0,2,3,0,4,5,0 輸出 null 解釋 呼叫函式後,輸入的陣列將...