微軟筆試題 回憶(回文方面)

2021-10-04 10:19:34 字數 1291 閱讀 6743

這道題當年我沒有做出來,今天微軟筆試又碰到了類似的題目

狠心要將這一塊吃透

主要還是對動態規劃掌握的不夠熟練。

n個瓶子都有編號,每次能射擊1個或多個瓶子,如果是回文的就能一次性擊倒。最少幾次能全擊倒?

輸入:[1, 2]

輸出:2

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

輸出:3

說明:第一次先射3,變成[1,3,1,5],因為有[1,3,1]回文可以一次擊倒,剩下[5]再一次

使用動態規劃,我們可以將射擊分為一系列子任務,用動態規劃熟悉的**表示,score[ i ] [ j ]表示要擊倒 i 到 j 瓶子至少需要幾次

那麼首先就可以知道score[0 ][0] 、score[1][1]、score[2][2] 、、、都為1(原因很顯然,只有乙個杯子,當然需要一次)

接下來,就繼續擴大範圍,看兩個兩個杯子

接下來是三個 三個

一次遞增

我們可以看到 如果  第 j 個杯子 與 第 j + i個杯子相等

那麼 score[j][j+i] 就可以等於 scores[j + 1][j + i - 1] ,也就是夾在他們中間的一段(因為動態規劃,規模小的已經最優)

但是這裡我們還需要考慮scores[j][j + k] + scores[j + k + 1][j + i] 這樣的情況(也就是把整段切分為前後兩段)

綜合以上思路,某位大佬的**如下:

//

// main.cpp

// leetcodetest

//// created by qiucheng lin on 2020/3/25.

//#include #include #include using namespace std;

int main() ;

vector> scores(n, vector(n));

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

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

for (int k = 0; k < i; k++)

}scores[j][j + i] = min_score;}}

cout << scores[0][n - 1];

return 0;

}

第二題也是關於回文的

第二題:

給乙個字串,每次可以移除其中乙個字元,或者移除乙個回文子串,求 全部移除所需最少次數

例如:14315.先移除3,再移除141,再移除5,得到最少次數3.

其實理解一下題意就會發現一模一樣。

筆試題目回憶

北京駿彩 http get與post區別 正規表示式 棧與堆的區別 多執行緒網路協議 常用協議tcp udp 資料庫基本查詢語句 1t硬碟寫滿需要多長時間 統計乙個整數的二進位制位為1的個數 23瓶藥水,一瓶有毒,用小白鼠試驗,找出30瓶五毒藥水,求最小的小白鼠數 1小時 畫uml時序圖 15個邏輯...

微軟2013暑期實習筆試回憶

一共是20道選擇題 有可能多選 答對加分,答錯扣分,所以了不敢亂選啊,現在開始回憶一些題目 1 有1000瓶水,其中1瓶是有毒的,小老鼠如果喝了有毒的水會在乙個星期後死掉,問至少需要多少只小老鼠來做實驗,才能夠在一星期後選出有毒的一瓶水。我選的是10,2 10 1024 1000,原理跟1 n選擇器...

微軟筆試題 彙總

1.臨界變數critical section的概念 還有semaphore,thread類似的這些 程序進入臨界區的排程原則是 如果有若干程序要求進入空閒的臨界區,一次僅允許乙個程序進入。任何時候,處於臨界區內的程序不可多於乙個。如已有程序進入自己的臨界區,則其它所有試圖進入臨界區的程序必須等待。進...