循环算法设置

        我们来看这么一个题目

        明显要使用循环解决,但循环的算法设计是一个问题,怎么设计算法解决最大值以及次数的问题?

        说到这,我联想到了一个大家义务教育都知道的事情。

        盛夏的雅典郊外,一片金黄的麦田在风中起伏。苏格拉底带着十余名弟子站在田埂上,指尖轻捻麦穗,缓缓开口:“今天我们来做一件事 —— 从田埂这头走到那头,每人只能摘一株麦子,目标是找到麦田里最大的那株。记住,只能向前走,不能回头,也不能更换手中的麦子。”​

        弟子们面面相觑,随即眼中泛起好奇。随着苏格拉底一声 “开始”,众人纷纷踏入麦田。​

        第一个弟子刚走了十几步,就看到一株颗粒饱满、秆子挺拔的麦子,他毫不犹豫地摘了下来。可没走多远,他就发现前方有好几株麦子比自己手中的更大更饱满,叶片上还沾着晶莹的晨露。他攥着麦穗的手越收越紧,脚步也慢了下来,眼中满是懊悔:“要是再等等就好了。”​

        中间的弟子们则显得谨慎许多。有的弯腰比对这株与那株的大小,有的抬头望向麦田深处,总觉得 “更大的一定在后面”。一名穿白袍的弟子走了大半程,手中仍空着 —— 他每次看到不错的麦子,都觉得 “或许下一株更好”,一次次错过,直到麦田尽头,才慌忙摘了一株普通的麦子,低着头走到苏格拉底身边。​

        最后一个弟子是最沉稳的。他先是放慢脚步,观察麦田前半段麦子的长势,默默记下大致的大小范围;走到中间时,他发现一株比之前所见都更匀称饱满的麦子,思索片刻后轻轻摘下;后续路程中,虽也遇到几株相近的,但他没有动摇,始终握着手中的麦穗。​

        当所有弟子都走到田埂另一头,苏格拉底看着他们手中各异的麦子,笑着问:“你们都找到最大的那株了吗?”​

        有人摇头,有人叹气,懊悔声此起彼伏。第一个弟子率先开口:“我太急了,早早就摘了,后来看到更大的却换不了。” 另一名弟子接话:“我总等后面有更好的,结果到最后只能随便选一株。”​

        苏格拉底抬手示意大家安静,目光扫过麦田:“其实,麦田里确实有最大的麦子,但没有人能真的‘找到’它。因为当你向前走时,永远无法预知后面是否有更大的;可若一味等待,最终只会空手而归。”​

        他看向那个沉稳的弟子,继续说道:“就像这位弟子,他没有追求‘绝对的最大’,而是在观察后选择了‘当下最合适的’—— 这便是人生的选择:我们无法拥有所有完美,也不能在犹豫中错失时机,懂得在恰当的时候做出取舍,珍惜手中所拥有的,才是真正的智慧。”​

        弟子们望着手中的麦子,又看向无边的麦田,忽然明白了苏格拉底的用意 —— 那片麦田,不正是每个人的人生吗?而手中的麦子,便是我们在每个阶段做出的选择。

        OK,故事结束了,我们暂且不论故事的内核,我就想说,怎么捡麦子???

        无论是人还是计算机,大概都会做一个基本的步骤:吃着碗里的,看着锅里的。把眼前的手中的比对。

        用计算机的语言其实就是语言学的逻辑,每次循环都是对眼前的手中的比对,眼前的手中的可以输入交换变化归一……

        除了眼前的手中的,还有大脑做出决策与处理。

        那么我们来模拟一下这个场景:注意,不用想太多,想好一个循环的事情:

        我现在手中是a,目前最大值也是a,眼前的是b,那么就要比一比那个麦子更大,如果b大让b做最大的,抛掉a麦子,让b这个眼前的麦子变成手中的麦子(也就是赋值语句b=a),再输入一个c作为b(b=c),再重复这个过程。这样最大就解决了。

        那怎么实现最大出现次数?就需要脑袋里面的计数,其实如果学了数组有了大背包储存会更简单,但我们现在就用新手装备速通。

        那么我们就只能关注每一个循环过程:我在单个过程中只能完成两件事:1.判断大小;2.计数。计数不能胡来得以大小关系为依据,那么大小关系就是重中之重。从最后一个最大赋值后开始相等技术,只需要让每出现一个最大count变1 。出现最大与眼前相等count+1;无了

        就这样,所以有些时候,不会分两类:1.不懂背景;2.不懂操作。That's all.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值