[Likou]アルゴリズム演習-シンプル(完全なルビーソリューション)

2つの数値の合計

整数配列numsとターゲット値targetを指定して、合計が配列内のターゲット値である2つの整数を見つけ、それらの配列添え字を返します。
各入力は1つの回答にのみ対応すると想定できます。ただし、この配列で同じ要素を再利用することはできません。

# @param {Integer[]} nums
# @param {Integer} target
# @return {Integer[]}
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]
            end
            j += 1
        end
        i+=1
    end
end

整数反転

32ビットの符号付き整数を指定すると、各整数の桁を反転させる必要があります。

# @param {Integer} x
# @return {Integer}
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    
end

def aa(x)
     if x < 2147483647 && x > -2147483648
         x
     else
        return 0
    end
end

一意の出現回数
整数配列arrを指定してください。配列内の各数値の出現回数を数えてください。
各数値の発生数が一意である場合はtrueを返し、それ以外の場合はfalseを返します。

def unique_occurrences(arr)
    ha = Hash.new(0)
    arr.each do |a|
        ha[a] += 1
    end
    ar = 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] = []
        end
        ha[num] += [[arr[i - 1],arr[i]]]
        i += 1
    end
    m = ha.keys.min
    ha[m]
end

「バルーン」の最大数は
テキストの文字列を提供します。テキスト内の文字を使用して、できるだけ多くの単語「バルーン」をつなぎ合わせる必要があります。
文字列テキストの各文字は1回しか使用できません。つなげることができる「バルーン」の最大単語数を返してください。
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
        end
    end
    ci["l"] = ci["l"]/2
    ci["o"] = ci["o"]/2
    qi.each do |q|
        unless ci.include?(q)
           flag = 0
        end
    end
    flag
    if flag != 0
        ci.values.min.round(0)
    else
        flag
    end
end

階段を上る階段を上っている
とします。建物の最上部に到達するには、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
      end
      return re
  end
end

おすすめ

転載: blog.csdn.net/weixin_42656358/article/details/102543279