【力扣】算法习题--简单(全ruby解法)

两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

# @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

“气球” 的最大数量
给你一个字符串 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
        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