最近會寫一些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...