最近看到有lua面试题,挺有意思的,一张表中有若干个数,0可以代表任何数
比如有张表{9, 2, 4, 1, 3, 0, 0, 0, 0},按照规则这张表中的四个0可以用来代表5,6,7,8,那么这张表是连续的,判断思路我是这样的
1、先遍历表,计算出0的个数
2、对表进行排序
3、计算相邻数之间的差值x,明显,如果x为1,那么这两个是连续的,如果不为1,那么x-1就是这两个数之间需要补充的数的个数,比如6和4的差x = 2,那么6和4之间需要补充的数就是x - 1 = 1,补一个5就可以连续了
具体代码如下
local nums = {9, 2, 4, 1, 3, 0, 0, 0, 0} local function cal(nums)
local n = #nums
print("n = ", n)
--计算0的数量
local zero = 0
for i=1,n do
print(nums[i])
if nums[i] == 0 then
zero = zero + 1
end
end
print("zero = ", zero)
--排序
local sortt = function(a, b)
return a < b
end
table.sort( nums, sortt )
local pre = nums[1]
--计算总的补充数量
local x = 0
for i=2,n do
print(nums[i])
local tx = nums[i] - pre
x = x + tx - 1
pre = nums[i]
end
print("x = ", x)
--如果x比0的数量少,那么可以将数列补充成连续的
if x <= zero then
print("is ok")
else
print("is not ok")
end
end
cal(nums)
|
请发表评论