第五節
題目:原地交換,不允許額外的空間
方法1:複雜度O(N/2)
1、左側逆序
2、右側逆序
3、整體逆序
方法2:循環右移
複雜度O(N^2)
方法3:
直到左右等長的時候,就不再交換了
第六節
方法一:暴力
方法二:一種不是最優解的解法:先對絕對值進行排序,再比較前後數字是否相同
方法三:最優解,雙指針原理
兩頭指針,誰的絕對值大,誰動
首尾指針:劃過的數字,可以保證以後再也不會出現這個結果
如果只關注所有波峯波谷的話,可能會出現波峯波谷失效的狀態。
變換思路:求某一個位置i上方有多少水
暴力解法O(n^2)
怎麼找左邊和右邊最大值?
生成某前綴數組最大值,作爲預處理結構:
因爲left輔助結構本身就是從左往右遍歷的,所以在計算水量遍歷時,可以用一個變量維持左側已經遍歷過部分的最大值,就沒有必要另外維護一個left數組了,相當於在線計算left數組
徹底不用輔助結構,用雙指針,時間複雜度仍爲O(n)的解法:
leftmax、rightmax兩個最大值,哪邊最大值小,結算哪一邊的水量。
移動的時候,更新自己一側的最大值
當左側最大值小於右側最大值的時候,結算左側水量,往右移動;
…
直到最後,兩個指針相遇,停止。
對數器驗證