目錄
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))