【语法】
一、抛坑提问:一串矿石价格里选一天买入、之后某天卖出,利润最大是多少?双重循环枚举是平方级——一遍扫描维护历史最低价,当天价减最低价即当下最优。
二、底层原理:最大利润等于后价减此前最低价:扫描中同步更新历史最低与最大利润,两变量一遍线性;本质是把"对未来最优"转化为"对历史最低"。
三、正确代码:
错误写法。示例代码如下:
local function maxProfit(prices)
local best = 0
for i = 1, #prices do
for j = i + 1, #prices do -- 枚举所有买卖对,平方级
best = math.max(best, prices[j] - prices[i])
end
end
return best
end
正确写法。示例代码如下:
local function maxProfit(prices)
local minP, best = math.huge, 0
for _, p in ipairs(prices) do
minP = math.min(minP, p) -- 维护历史最低
best = math.max(best, p - minP)
end
return best
end
sendmsg(actor, 1, "矿石倒卖最大利润 "
.. maxProfit({7, 1, 5, 3, 6, 4}))
四、引擎验证:1 万条价格:平方版 5000 万次比较;单遍版 1 万次,快 5000 倍,利润 5 一致。
五、FAQ:问:可以多次买卖呢?答:把每段正差值都累加,贪心一遍即可。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、规则机制 一行定骨架:mask:setVisible(true) 先于一切加载动作。切图最怕"加载一半的半成品…
【游戏】 一、规则机制 线上事故:网络一抖直接踢回登录页,重新登录还要排队,火气全从这一脚踢出来。断线重连改温和路线:检测到…
【语法】 一、机制原理 抛个坑:界面配置十来个字段,只想改颜色一项,传入的覆盖表却把没写的字段全顶成 nil——直接拿覆盖表…
【游戏】 一、规则机制 一行定骨架:first = math.floor(offset / ROW_H)。千行列表建一千个节…
【语法】 一、机制原理 隐蔽的坑:给敏感词表去重,用了"排序后相邻比对"的老办法,重复是去掉了,原有优先级顺序也被打乱。去重…
【语法】 一、机制原理 隐蔽的坑:网格数据用 grid[x .. "_" .. y] 拼字符串键存取,写入顺手,可要遍历整张…