LeetCode 4 動態規劃

2021-10-03 04:30:59 字數 1883 閱讀 1198

//揹包問題c++**動態規劃

class

solution

for(

int i =

1; i < n;

++i)

for(

int j =

0; j <= w-weight[i]

;++j)

}for

(int i = w; i >=0;

--i)

return0;

}};

1. word-break(leetcode 139)

class

solution}}

return res[s.

size()

];}}

;

2. candy(leetcode 135)

老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。

你需要按照以下要求,幫助老師給這些孩子分發糖果:

每個孩子至少分配到 1 個糖果。

相鄰的孩子中,評分高的孩子必須獲得更多的糖果。

那麼這樣下來,老師至少需要準備多少顆糖果呢?

雙陣列法

class

solution

for(

int i=ratings.

size()

-2;i>=0;

--i)

int sum =0;

for(

int i=

0;isize()

;++i)

return sum;}}

;

3.分割回文串i(leetcode 131)

給定乙個字串 s,將 s 分割成一些子串,使每個子串都是回文串。

返回 s 所有可能的分割方案。

class

solution

void

dfs(string s,vector

& cur)

//每一次都判斷前i個字元是否可以組成回文串,size()長的字串,則有size()個階段

for(

int i=

1;i<=s.

size()

;++i)}}

vector>

partition

(string s)

};

牛客刷題後有大佬說:「如果要求輸出所有可能的解,往往都是要用深度優先搜尋。如果是要求找出最優的解,或者解的數量,往往可以使用動態規劃。」

4.分割回文串ii(leetcode 132)

給出乙個字串s,分割s使得分割出的每乙個子串都是回文串

計算將字串s分割成回文分割結果的最小切割數

class solution 

}//dp求最少分割次數,每一位表示從頭至此的最少分割次數

vectorres(s.size());

for(int i=0;ij rangein[0,i)

if(checkpalind[j+1][i])}}

return res[s.size()-1];//最小分割次數

}};

5.最長回文子串(leetcode 5)

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。

class

solution}}

}return s.

substr

(pos,maxlen);}

};

總之一定要抓住遞推公式,在此基礎上分階段進行求解,不能放過其他任何情況

leetcode 4 尋找中位數

1.題目鏈結。這個題目使用分治來寫似乎不是很好想。大概的寫法就是 我們需要使用分治一步一步的找到中位數在哪個位置。我們首先在兩個陣列各自取出一總長度一半的資料,判斷取出來的資料的最大值,確定中位數到底在哪個區間。555,語言表達能力不強,看 吧,還是很好理解的。class solution 遞迴的出...

leetcode4三數之和

給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...

Leetcode 4 雙指標篇

經典解法就是用兩個指標,乙個跑得快,乙個跑得慢。如果不含有環,跑得快的那個指標最終會遇到 null,說明鍊錶不含環 如果含有環,快指標最終會超慢指標一圈,和慢指標相遇,說明鍊錶含有環。結論 當快慢指標相遇時,讓其中任乙個指標指向頭節點,然後讓它倆以相同速度前進,再次相遇時所在的節點位置就是環開始的位...