弱智記錄.1
有的時(shí)候不和別人比一下,永遠(yuǎn)都不知道自己能弱智到什么程度。
問(wèn)題是:我是一個(gè)公司的員工,我有N天的帶薪休假,我想要在未來(lái)的M天里休盡量長(zhǎng)的假,M天中,哪天上班哪天放假是已知的。用程序算出這個(gè)最優(yōu)的方案。
第一眼看到這個(gè)問(wèn)題,居然有百分之50的錯(cuò)誤率,想著自己十分鐘就能搞定。然而……
當(dāng)時(shí)的思路是爆破,先提取出所有連續(xù)工作的天數(shù),作為一個(gè)“段”存在一個(gè)集合里。如果工作的天數(shù)大于N,這一段時(shí)間不能用來(lái)休假,移出集合。
剩下要做的,就是把假期拆開(kāi),塞進(jìn)集合里的那些段里,枚舉出一個(gè)最長(zhǎng)假期的方案。
然而這個(gè)想法從一開(kāi)始就錯(cuò)了,就算某一段的時(shí)間大于N,這一段的某一部分還是可能被用作休假。
這個(gè)問(wèn)題難就難在,需要把假期分成多段來(lái)塞到工作日里……段的數(shù)量是未知的??赡苄蕴?,總想著設(shè)計(jì)一個(gè)可以適應(yīng)所有情況的方案,最后寫(xiě)到快腦溢血也沒(méi)完成。
這應(yīng)該和算法,數(shù)學(xué)無(wú)關(guān),單純就是考驗(yàn)邏輯思維,考驗(yàn)一個(gè)人解決問(wèn)題的能力。
不過(guò)這個(gè)問(wèn)題也給了我一個(gè)啟發(fā):
不要試圖對(duì)具體的情況作出處理。
我一開(kāi)始想,這還不簡(jiǎn)單:
直接把帶薪休假跟在最長(zhǎng)的普通假期后面。
但情況很多,比如給三天假期,然后未來(lái)五天里,工作和放假各一天穿插。
這種情況很輕易的擊敗了我那個(gè)邏輯。
然后我改變了想法:
用帶薪休假連接兩個(gè)普通假期,取最長(zhǎng)的那個(gè)。
然而這個(gè)邏輯也有漏洞,因?yàn)橛锌赡艽嬖谌齻€(gè)普通假期連在一起,比兩個(gè)最長(zhǎng)的長(zhǎng)的情況。
思考所有的情況是很難做到的,總會(huì)在想不到的地方有一些漏洞……
也就是說(shuō),我需要盡量用抽象的思維來(lái)思考這個(gè)問(wèn)題。雖然現(xiàn)在還是懵逼狀態(tài),但我相信明天一定能得到正確答案。