两数之和
给定一个整数数组 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