九章演算法 領英面試題 拿走瓶子

2021-10-21 02:50:55 字數 811 閱讀 9243

描述

有一排有編號的瓶子,現在你需要將這些瓶子全部拿走。

你每次只可以拿走連續的若干個瓶子,並且需要保證瓶子的編號是乙個「回文串」。

回文串指的是正著和反著讀都一樣的串,例如「121」和「4664」。

返回拿走所有瓶子所需要的最少次數。

樣例1輸入:[1,3,4,1,5]

輸出:3

說明:第一次先拿走[4],剩餘[1,3,1,5]

第二次拿走[1,3,1],剩餘[5]

第三次拿走[5]

樣例2輸入:[1,2,3,5,3,1]

輸出:2

利用區間dp解決。 dpi代表從第i位到第j位最少被消除的次數。然後我們在此基礎之上向外延申。 對於i到j的區間,他的答案可能由i到k和k+1到j這兩個區間的和,也就是dpi = min(dpi, dpi + dpk + 1) 這只是其中一種可能性。 接著我們考慮另一種。當arri=arrj時,dpi = dpi + 1 意義是,若當前區間的前乙個和後乙個數剛好相等,那麼這兩個數可以直接跟隨著當前區間的最後一次刪除一起刪除(我們無需考慮區間內部到底是做什麼刪除的,只要知道在最後一次刪除前,這個區間剩餘的和前後一定能組成新的回文子串)

public class solution

for (i = 0; i < n; i++) 

for (i = 0; i + 1 < n; i++)

for (l = 2; l < n; l++)

for (k = i; k < j; k++) }}

return dp[0][n - 1];

}

更多題解參考

九章演算法 招商銀行面試題 拿走瓶子

描述 有一排有編號的瓶子,現在你需要將這些瓶子全部拿走。你每次只可以拿走連續的若干個瓶子,並且需要保證瓶子的編號是乙個 回文串 回文串指的是正著和反著讀都一樣的串,例如 121 和 4664 返回拿走所有瓶子所需要的最少次數。lintcode 領扣 樣例1 輸入 1,3,4,1,5 輸出 3 說明 ...

九章演算法 Google面試題 內積

描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...

九章演算法面試題32 小球排序

有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍...