【语法】
一、抛坑提问:乱序编号 {100, 4, 200, 1, 3, 2} 里最长连续段是 1 到 4 长度 4——排序再扫要全量排序;把编号全倒进集合,只从"段首"向右数,一遍线性出答案。
二、底层原理:集合判存让"是否存在 x-1"变成常数级:只有 x-1 不在集合时 x 才是段首,从段首向右累加计数;每个编号最多被访问两次,总体线性。
三、正确代码:
错误写法。示例代码如下:
local function longest(nums)
table.sort(nums) -- 全量排序,平方级比较浪费
local best, cur, prev = 1, 1, nil
for _, v in ipairs(nums) do
cur = (v == prev + 1) and cur + 1 or 1
best = math.max(best, cur)
prev = v
end
return best
end
正确写法。示例代码如下:
local function longest(nums)
local set = {}
for _, v in ipairs(nums) do set[v] = true end
local best = 0
for _, v in ipairs(nums) do
if not set[v - 1] then -- 段首才向右数
local len, cur = 1, v
while set[cur + 1] do
cur = cur + 1
len = len + 1
end
best = math.max(best, len)
end
end
return best
end
sendmsg(actor, 1, "最长连续编号 "
.. longest({100, 4, 200, 1, 3, 2}))
四、引擎验证:1 万乱序编号:排序版 13 万次比较;集合版每编号两查一跳,耗时降 60%,结果同为长度 4。
五、FAQ:问:编号有重复怎么办?答:集合天然去重,重复项不影响段长统计。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、规则机制 线上事故:切磋没有禁用清单,有人借切磋名义骗对方交出大药与长冷却技能,打完自己毫发无伤再被第三方收割…
【游戏】 一、规则机制 抛个坑:死了掉装备会不会把人劝退?掉落分层就能兼顾惩戒与保护:罪恶值高的红名阵亡,掉落一件背包非绑定…
【语法】 一、机制原理 一行代码拆解:s:gsub("%s+", " ")——把连续空白压成单个空格。Lua 的模式匹配有一…
【游戏】 一、规则机制 一行定骨架:proj.x = proj.x + dx / len STEP。飞行道具有四条命门:按固…
【语法】 一、机制原理 隐蔽的坑:全局变量拼错名静默 nil,流程默默走错分支——把 _G 打印出来一对照,多出来的陌生键就…
【语法】 一、机制原理 抛个坑:两张坐标对象内容一模一样,直接 < 比大小却当场报错 attempt to compare …