Lua实战之判断连续
目录
Description
Implemention
Plan A
Plan B
Description
判断表中的数是否连续,0可以代表任意数!
e.g.
{5, 8, 0, 1, 4, 2, 0, 6}是连续的!
Implemention
Plan A
local testTbl1 = {5, 8, 0, 1, 4, 2, 0, 6}
function jungleContinuation1(targetTbl)
-- step1:统计0的个数,并将其从目标table中移除
local zeroCnt = 0
for i = #targetTbl, 1, -1 do
if targetTbl[i] == 0 then
zeroCnt = zeroCnt + 1
table.remove(targetTbl, i)
end
end
-- step2:排序
table.sort(targetTbl, function(a, b)
return a < b
end)
-- step3:统计连续情况下需要补0的数量
local intervalCnt, sufEle = 0, targetTbl[#targetTbl]
for i = #targetTbl-1, 1, -1 do
if targetTbl[i] == sufEle then -- 有相等的必不连续
return false
end
local interval = sufEle - targetTbl[i] - 1
intervalCnt = intervalCnt + interval
sufEle = targetTbl[i]
end
return intervalCnt <= zeroCnt
end
print("testTbl1中的数是否连续:", jungleContinuation1(testTbl1))
Plan B
local testTbl2 = {5, 8, 0, 1, 4, 2, 0, 6}
function jungleContinuation2(targetTbl)
-- step1:目标table的原始元素个数
local eleCount = #targetTbl
-- step2:移除目标table中的0
for i = #targetTbl, 1, -1 do
if targetTbl[i] == 0 then
table.remove(targetTbl, i)
end
end
-- step3:排序
table.sort(targetTbl, function(a, b)
return a < b
end)
-- step4:判断是否有相等的元素
local preEle = targetTbl[1]
for i = 2, #targetTbl do
if targetTbl[i] == preEle then
return false
end
preEle = targetTbl[i]
end
-- step5:计算首尾元素的差值
local diffNum = targetTbl[#targetTbl] - targetTbl[1]
return diffNum+1 <= eleCount
end
print("testTbl2中的数是否连续:", jungleContinuation2(testTbl2))