-- 取下界的二分查找,未找到目标值,则取比目标值小的最近的数
-- 时间复杂度 log2n
function LC( arr, num )
-- body
local max, start, over = -1, 1, #arr
while start <= over do
local mid = math.modf(start+(over-start)/2)
if arr[mid] > num then
over = mid - 1
else
max = mid
start = mid + 1
end
print(max,start,over)
end
return arr[max]
end
a = {1,3,5,6,7,9,12,16,17,21,25,33}
print(LC(a, 13))
结果:
12