Lua隨筆系列一 陣列有序

2021-10-06 17:57:37 字數 1736 閱讀 9051

最近會寫一些lua在專案中用到的和平時遇到的一些演算法之類的文章,筆者也是菜鳥小白一枚,如果有錯誤的地方還請多多指點。

題目描述:判斷乙個陣列是否有序,陣列中0可以用來補差值

演算法步驟:

1.陣列為nil直接返回false

2.陣列不為nil,如果陣列只包含乙個元素肯定有序,如果包含2個及以上需要進行判定(a.如果陣列元素都為0則肯定有序,如果不全為0,則需要進行判定)

3.正常判定流程,先將陣列排序,計算出0的個數(用zerocount表示)和第乙個非0元素的索引(用numindex表示),之後就是比較非0元素的下一元素和當前元素之差(兩個元素之差用diff表示),最後判斷0的個數和元素之差,如果zerocountlua**如下:

--判斷乙個陣列是否有序,陣列中0可以用來補差值

function orderedarray(tbl)

if tbl == nil then

return false

end--有乙個元素的陣列肯定是有序的

if tbl ~= nil and #tbl ==1 then

return true

end--將陣列排序

for k,v in pairs(tbl) do

print("original-k,v=",k,v)

endtable.sort(tbl)

for k,v in pairs(tbl) do

print("sorted-k,v=",k,v)

endlocal zerocount = 0 -- 統計陣列中0的個數

local numindex = 0 --記錄排序後陣列中第乙個非0數字的索引

for k,v in pairs(tbl) do

if v == 0 then

zerocount = zerocount + 1

else

numindex = k

break

endend

if zerocount == #tbl then

return true

endprint("zerocount,numindex=",zerocount,numindex);

for i=numindex+1,#tbl do

--如果兩個數相差1就是有序,不是相差1才進行後續判斷

if tbl[i] ~= tbl[i-1] + 1 then

local diff = tbl[i] - tbl[i-1] -1 --計算兩數相差幾

if zerocount >= diff then

--如果0的個數大於等於兩數的差值,則滿足有序條件,繼續判斷

zerocount = zerocount - diff

else

--如果0的個數小於兩數的差值,0補全也不會是有序,直接返回false

return false

endend

endreturn true

endlocal test1 =

local test2 =

local test3 =

local test4 =

local test5 =

local test6 =

print(orderedarray(test6))

lua執行結果:

陣列一 陣列概述 c

一.數組概述 1 1.陣列?陣列是帶索引的同型別的物件的集合.陣列是一種資料結構,它包含若干相同型別的變數。陣列是乙個經過索引的物件集合。例如 int array 1 2.陣列的元素?包含在乙個陣列中的變數通常稱為陣列的元素 也叫變數的元素.在定義陣列時 可以預先指定陣列元素的個數 這時候在 中指定...

Lua 初學者隨筆 一

1.關於return function test a,b print hello return print world end call the function test 1,2 output hello world 奇怪之處 lua關於return語句放置的位置 return用來從函式返回結果,...

Php學習《一》 陣列

1.陣列分類 a.帶值陣列 帶有數字 id 鍵的陣列 可以使用不同的方法來建立數值陣列 例子 1 在這個例子中,會自動分配 id 鍵 names array peter quagmire joe 例子 2 在這個例子中,我們人工分配的 id 鍵 names 0 peter names 1 quagm...