今天敲代碼的時候被基礎給擊倒了(難受
while (i < j) {
res = height[j] > height[i] ?
Math.max(res, height[i++] * (j - i)):
Math.max(res, height[j++] * (j - i));
}
上面是我寫的代碼節選,但是這個地方的計算結果總是出錯。搞得我非常鬱悶。。。
我苦思冥想覺得代碼沒問題啊!錯出在哪呢?
最後發現就出在這個j++、i++。。。
原本我的預想是在while循環中使i和j各自自增,結果我忽略了j++和i++並不是循環之後才生效。。。它立馬就生效了,而且是同一行代碼。。。
也就是說假設j=4
那麼按照我的代碼,height[j++] 就等價於 height[4]
但是隨後的 (j - i)就變成了 (5 - i)。。。(天吶,我居然犯了這種錯誤
與其類似的還有--i和--j。。。假設j = 4;
那麼height[--j] 就等價於 height[3]。。。(基礎還是得打牢啊,不然debug到死