//揹包問題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,說明鍊錶不含環 如果含有環,快指標最終會超慢指標一圈,和慢指標相遇,說明鍊錶含有環。結論 當快慢指標相遇時,讓其中任乙個指標指向頭節點,然後讓它倆以相同速度前進,再次相遇時所在的節點位置就是環開始的位...