子数组的最小值之和
给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组。
由于答案可能很大,因此返回答案模 0^9 + 7
。
示例:
输入:[3,1,2,4]
输出:17
解释:
子数组为 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。
最小值为 3,1,2,4,1,1,2,1,1,1,和为 17。
提示:
1 <= A <= 30000
1 <= A[i] <= 30000
# 并没有通过(TLE),能力有限想不到其它办法了
# @param {Integer[]} a
# @return {Integer}
def sum_subarray_mins(a)
res_arr = Array.new
a.each_with_index do |_, index|
tmp_arr = a.clone
len = tmp_arr.length
count = index + 1
while len > 0 && len >= count do
res_arr << tmp_arr.take(count)
tmp_arr.shift
len = tmp_arr.length
end
end
sum = 0
res_arr.each { |val| sum += val.min }
#p sum
p sum % (1e9 + 7).to_i
end