You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中lower_bound是什么?为何这段求最小平方数代码输出为16?

解答你的两个Ruby问题

1. Ruby中的lower_bound是什么?

首先得说,Ruby标准库没有直接提供名为lower_bound的方法——这个概念其实是从C++ STL里过来的,它的作用是在有序集合中找到第一个不小于(大于等于)给定值的元素位置。

不过在Ruby里,我们可以用Array#bsearch方法来实现完全等价的功能。举个实际例子:假设你有一个有序数组,想找到第一个大于等于6的元素,代码可以这么写:

sorted_arr = [1, 3, 5, 7, 9]
target = 6
# 用bsearch实现lower_bound逻辑
result = sorted_arr.bsearch { |num| num >= target }
puts result # 输出7

这里的bsearch会对有序数组做二分查找,效率很高,当块返回true时,它就会定位到第一个满足条件的元素,完美对应lower_bound的需求。

2. 为什么你的代码运行后输出16?

咱们一步步拆解你的代码逻辑,就能明白为什么传入10会返回16了:

你的函数smallest_square的逻辑是:从i=0开始,不断计算i的平方,直到找到第一个大于传入的lower_bound的平方数,然后返回它。

代入lower_bound=10的执行过程:

  • i=0:0*0=0 → 0不大于10,继续
  • i=1:1*1=1 → 不大于10,继续
  • i=2:2*2=4 → 不大于10,继续
  • i=3:3*3=9 → 9还是小于10,继续
  • i=4:4*4=16 → 16>10,满足条件,返回16

所以输出16是完全符合代码逻辑的结果~

如果你其实想找的是大于等于lower_bound的最小平方数,结果还是16(因为9<10,下一个平方数就是16)。不过可以给你优化一下代码,用更Ruby化的写法,或者直接用数学方法更高效:

优化写法1(更简洁的循环)

def smallest_square(lower_bound)
  i = 0
  loop do
    square = i * i
    return square if square > lower_bound
    i += 1
  end
end

优化写法2(数学计算,避免循环)

def smallest_square(lower_bound)
  sqrt_value = Math.sqrt(lower_bound)
  # 对平方根向上取整,再平方就是结果
  ceil_i = sqrt_value.ceil
  ceil_i * ceil_i
end
puts smallest_square(10) # 同样输出16

这样是不是就清楚多啦?

内容的提问来源于stack exchange,提问作者timSully

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:14:01