室友面试作弊,我举报了。。
刚刷到个程序员网友的贴子,说他室友靠AI工具面试作弊,拿了offer还到处炫耀,结果被他举报,最后两人闹翻了。🤦♂️
说实话,作为程序员,我觉得这事儿挺扎心的。每天敲代码、背八股,辛辛苦苦准备面试,结果有人直接开外挂,真有点像打游戏遇到开挂的——体验直接拉满无语。但我不觉得楼主举报是多管闲事,毕竟咱做技术,最怕的就是风气变坏。你靠能力上岸,我服你;靠作弊,那以后谁还敢和你共事?网友有说“谁敢跟你做同事”,其实大家只是怕这种氛围蔓延开,搞坏整个圈子。
不过换个角度,宿舍氛围搞成这样,估计以后都得各走各的路了。程序员圈子小,还是要守点底线。【备注:文末可领最新资料】
面试题:每天的最大交易
我在家刷剧的时候,手机突然叮咚一声——我们组那个小李发微信问我,“东哥你那个‘每天的最大交易’算法还有没?有个同学算法题卡住了…”我当时本来已经快困死了,结果被他一句话搞精神了。这个问题,其实我上个月在公司楼下抽烟的时候还给人讲过一次——每次说到算法,反正就是大家都会问,你那代码到底咋写的,能不能不讲那么高大上,说点人话。那今天我就顺便给你们聊聊这个题吧。
先说下题意,不要什么花里胡哨的描述,简单来说,就是你每天可以根据股票价格决定买卖,问你一天内最大能赚多少钱。其实也不用管那么多啥金融背景,直接看数据就行了,给你一个数组,里面每天的价格,你随便买随便卖,但一天只能做一次买入一次卖出(不能卖了再买啊),怎么操作利润最大。
我跟你说啊,这题刚开始大家都会被绕晕,什么DP、贪心、二分都冒出来…其实啊,咱想下,买卖一次,就是买的便宜,卖的贵嘛。那不就找一段价格差最大的时候吗?有个小细节——买必须在卖之前,对吧,不能倒着来。说白了,就是找个区间左低右高差最大。
我每次给人讲,都先画个折线图,“你看这点最低,这点最高,中间怎么动都没用,就这两点差最大。”然后有人就问了,那万一最高点在最低点前面呢?其实就不能这样选,必须低点在前,卖点在后。那咋写?别想着什么复杂的暴力O(n^2),真的会被喷,O(n)走一遍就行。
我给你们整一个最通俗的代码哈,直接用Python来写,别的不说,Python代码真的一看就懂。大体思路就是:
一边走一边记录当前最低价 每遇到一个新价格,看看卖出去能赚多少钱(就是当前价减最低价) 跟之前赚的比一下,保留最大值
你就按这个思路,随便写几行就行了,根本不用什么额外空间。举个例子,prices = [7,1,5,3,6,4],最低1,最高6,最大赚5,对吧。
我那天还跟小李说,这种题目你别硬背代码,就像生活里买东西一样,你买白菜,便宜买,后面涨价再卖。现在直接贴个代码,超级简单:
defmaxProfit(prices):
min_price = float('inf')
max_profit = 0
for price in prices:
if price < min_price:
min_price = price
profit = price - min_price
if profit > max_profit:
max_profit = profit
return max_profit
你别看代码短,思路其实全在里头了——每一步都在“考虑”现在要不要卖,但低价是历史里最便宜的,利润最大化一直更新。就这个思路,你上班摸鱼写一遍,闭着眼睛都能做出来。
对了,有同学又问,万一全是下跌的咋办?比如[7,6,4,3,1],那你就啥都别买,一分都不亏,利润就是0。代码本身就能处理,完全不用担心。
反正,这题真的别怕,不要一上来就想着复杂解法。日常面试啥的,这种思路最吃香,面试官一看你不是瞎卷细节,直接通过。
-END-
我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领