村长的自我修养:一次扫描擒二肥
本文纯属虚构,如有雷同,那一定是你家猪昨晚托梦告诉我的。
序章:金猪奖的诱惑
村口大喇叭一响,全村都炸了——县里办“金猪奖”选美,规则特离谱:
选两头猪,成绩 = (上台体重 - 1) × (上台体重 - 1),越大越好。
减一?因为猪一上台,看见黑压压的人群当场吓瘦一斤。你问猪也会紧张?废话,你当猪不要面子啊!
我——阿星村长,秒懂:这不就是找全村最肥的两头猪嘛,每人扣一斤保护费,最后比的还是吨位。吨位即正义,体重即真理!
我正准备去猪圈点兵,大门"砰"地飞开,二大爷抱着他家的猪——花花,像抱亲孙子一样闯进来。
第一幕:二大爷的倔强
“村长!我家花花三百斤,气质这块拿捏得死死的!”二大爷唾沫横飞。
我看了一眼花花:四脚朝天,正挠痒痒,眼神迷离似喝了散装白酒。
“二大爷,咱讲科学,气质不能当公斤用。”
“我养了三十年猪,还不知道哪头重?”二大爷脖子比猪还粗。
“那就操场见真章!”我抄起大喇叭,“各家各户,带猪到操场,现场选拔!”
第二幕:全村海选,还是钦点猪王
操场上五百头猪乱拱,猪毛与口水齐飞。
王大妈第一个跳出来献策:“这还不简单!把所有猪挨个过秤,按体重从重到轻排好队,挑前两名不就完了!”
我心中一惊。果然,高手在民间,村中卧虎藏龙——王大妈不经意间就提出了经典排序法,时间复杂度 O(n log n),写成代码就长这样:
def maxProduct(nums: List[int]) -> int:
nums.sort()
return (nums[-1]-1) * (nums[-2]-1)
代码挺优雅,但我一脑补画面:
第一头猪刚上秤,后面的猪就开始起哄。猪A趁乱溜了,猪B和猪C当场打起来了,理由是“你刚才瞅我眼神不对”;为了维持秩序——防止猪插队、打架、随地大小便——老王在追猪,老李在找秤,老赵被猪拱翻在泥坑里。人力成本:5个村民,设备损耗:3个秤被猪踩坏,耗时:3小时,精神损失费:无法计算(被猪拱了三次)。
“停!”我一拍桌子,“王大妈,你这方法不行。”
王大妈不服:“为啥不行?我闺女学校做课间操,三百个学生都这么排的!”
“那是真排队,咱这是选最大值。我们要的是最肥的两头,不是给五百头猪办军训。”
我掏出那本皱巴巴的《村长的自我修养》,啪地拍在桌上:“猪不动我动——一轮扫描赶猪大法!”
“本子上只记两个数:max1 最肥猪,max2 第二肥。从村头走到村尾,见一头看一眼登记表,走完收工。”
二大爷从人群中探出脑袋,一脸迷茫:“猪不用排队?”
“排什么队,费那劲。你只需要记住全村最肥的两头就行了,其他的猪爱咋咋地。这就叫——只关注极值,不纠结全排序。”
def maxProduct(nums: List[int]) -> int:
# 一轮扫描赶猪法,O(n) 不折腾
max1 = max2 = float('-inf')
for pig in nums:
if pig > max1:
max1, max2 = pig, max1 # 新猪王出现,旧王退居二当家
elif pig > max2:
max2 = pig # 干掉二当家
return (max1 - 1) * (max2 - 1)
“来,走一遍!”我当场开始扫描:
- 大壮 250 斤,
max1=250, max2=0 - 铁蛋 280 斤,
max1=280, max2=250 - 花花扭臀出场,300斤,
max1=300, max2=280。 - 航母滚出,350斤,
max1=350, max2=300。 - 二壮路过,340斤,
max2=340。
本子一合:“选拔结束!代表咱们屯的——航母350,二壮340,乘积349×339=118311。”
二大爷瘫坐:“花花呢?”
我叹了口气:“二大爷,花花虽然三百斤,但在 350 和 340 面前,只能当个啦啦队。算法不讲感情,只讲吨位。”
二大爷大哭:“我不信!你是不是偷偷给‘航母’打了瘦肉精!我的花花是气质型选手啊——!”
第三幕:决赛现场——别的村还在折腾
到了县里比赛,场面那叫一个壮观。全县十二个村,每个村都牵着一堆猪,跟选妃似的。
我扫了一眼其他村的策略:
张家村:正在给猪排队,猪不听话,三个村民按着两头猪强行排序 猪A:“拱死我也不站那儿!” 村民:“快排!要讲效率!” 我小声嘀咕:“你们这是在搞冒泡排序吧?猪都快冒烟了…”
李家村:带了个电子秤,结果电池没电了 村长:“谁家有7号电池?紧急求助!” 我掏出两节电池,递过去:“二十块一节,扫码支付。” 村长怒斥:“你这是趁火打劫!” 我:“不,这是市场经济。”
王家村:给猪抹香水、戴领结、穿小西装 我问:“评委看体重,不看穿搭吧?” 王大妈瞪我:“你懂啥!这是印象分!” 我看了一眼"竞争对手"——一头穿着燕尾服的猪,忍不住笑出声:“您家猪这是要去参加婚礼还是选美?”
半小时后,所有村终于都交了成绩。
评委拿着大喇叭宣布:“幸福屯——118311分!断崖式第一!”
彩蛋:赛后采访
记者围上来:“阿星村长,请问您是如何做到精准选出最重的两头猪的?”
我深吸一口气,开始装逼:
“其实很简单。我没有采用传统的排序算法,而是使用了一轮扫描的贪心策略。时间复杂度O(n),空间复杂度O(1),内存友好,缓存命中率高——”
记者:"……能说人话吗?"
我:“就是赶一遍猪,记下最重的两头,完事。”
记者呆住。二大爷抱着花花从旁边路过,头也不回地丢下一句:“我都跟你说了,他以前是个写代码的。”
花花哼了一声,表示赞同。

本作品采用
知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议
进行许可。