鎵撳鍔垗锛圠eetCode-198锛夈€?/span>     &nbs"/>

绠楁硶-鍔ㄦ€佽鍒掞紙浜岋級

Posted Coding鐨勫摂鍝斿彣鍙?/a>

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绠楁硶-鍔ㄦ€佽鍒掞紙浜岋級相关的知识,希望对你有一定的参考价值。

        浠婂ぉ缁х画鎴戜滑鐨勫姩鎬佽鍒掍笓棰橈紝闆嗕腑缁冧範涓€浜涙湁鍏冲姩鎬佽鍒掔殑棰橈紝鍔犳繁鍗拌薄銆?br>

馃憠馃憖馃挰浠婃棩缁冧範锛堜竴锛?span class="mq-4">鎵撳鍔垗锛圠eetCode-198锛夈€?/span>


        鍘诲伔娌胯鐨勬埧灞嬶紝涓旀瘡涓眿閲岄兘鏈夋暟閲忎笉绛夌殑閽憋紝鐢ㄦ暟缁刵ums鏉ヨ〃绀烘墍鏈夊眿閲岀殑閲戦銆?/p>

        娉ㄦ剰锛屽鏋滃伔鐩搁偦涓や釜灞嬪氨浼氳Е鍙戞姤璀︼紝璁$畻鍦ㄤ笉瑙﹀彂鎶ヨ鐨勬儏鍐典笅锛屼綘涓€鏅氭渶澶氳兘鍋峰埌澶氬皯锛岃繑鍥炴渶澶у€笺€傚锛?/p>

杈撳叆锛歔1,2,3,1]杈撳嚭锛?--------------杈撳叆锛歔2,7,9,3,1]杈撳嚭锛?2=2+9+1

馃檱鎬濊矾锛?/span>

        渚濇棫鏄姩鎬佽鍒掞紝杩樻槸鎴戜滑涔嬪墠寮鸿皟鐨勶細

  1. 瀹氫箟瀛愰棶棰橈紝

  2. 鎵惧嚭鐘舵€佽浆绉伙紝鍗冲瓙闂鐨勯€掓帹鍏崇郴

  3. 纭畾銆愬~琛ㄣ€戠殑璁$畻椤哄簭

  4. 绌洪棿浼樺寲锛岃繖鍓嶆湡鍙互鍏堟斁涓€鏀撅紝绛夌啛缁冧簡鍦ㄦ潵鑰冭檻銆?/span>



涓€銆佸畾涔夊瓙闂

        浠€涔堟槸瀛愰棶棰橈紵瀛愰棶棰樻槸鍜屽師闂鐩镐技锛屼絾瑙勬ā杈冨皬鐨勯棶棰樸€?span class="mq-18">鏈?/span>棰?/span>姹傝В浠庢墍鏈?/span>灞嬮噷鍙互鐩楀彇鐨勬渶澶?/span>閲戦锛屽瓙闂灏辨槸锛屸€滀粠K涓眿閲岃兘鍋峰埌鐨勬渶澶ч噾棰濃€濄€傛垜浠畾涔夊瓙闂鍙傛暟涓簁锛屽鏋滄湁n涓埧灞嬬殑璇濓紝灏变竴鍏辨湁n涓瓙闂锛屽姩鎬佽鍒掑氨鏄姹傝繖涓€鍫嗗瓙闂鐨勮В銆?/span>

绠楁硶-鍔ㄦ€佽鍒掞紙浜岋級

鍔ㄦ€佽鍒掕姹傛湁涓や釜鎬ц川锛?/span>

  1. 鍘熼棶棰樺彲鐢卞瓙闂琛ㄧず锛屽惁鍒欐眰鍗婂ぉ寰椾笉鍒板師鏂囬偅灏卞緢灏村艾浜嗐€傝繖閬撻涓紝n=k锛屽氨鏄師闂銆?/span>

  2. 涓€涓瓙闂涔熷彲浠ョ敱鍏朵粬瀛愰棶棰樻潵寰楀埌銆傚杩欓亾棰橀噷锛宖(k)鍙互鐢眆(k-1)鍜宖(k-2)鏉ュ緱鍒帮紝鑷充簬涓轰粈涔堟垜浠斁鍚庨潰鏉ヨ銆?/span>

        婊¤冻浠ヤ笂涓や釜鎬ц川锛屼竴鑸氨鍙互鐢ㄥ姩鎬佽鍒掓潵姹傝В銆?br>

浜屻€佸啓鍑洪€掓帹鍏崇郴锛堢姸鎬佽浆绉伙級銆?/span>


        杩欎竴姝ユ槸鍔ㄦ€佽鍒掔殑鏍稿績锛屼篃鏄毦鐐癸紝濡傛灉鎴戜滑鎵句笉鍒伴€掓帹鍏崇郴锛岄偅涔堝姩鎬佽鍒掍篃娌℃垙銆?/span>

        鎴戜滑鏉ュ垎鏋愭棰橈細

        鍋囪鏈塶涓眿锛屽眿閲岀殑閲戦鍒嗗埆鏄痭ums[0]銆乶ums[1]銆乶ums[2]路路路nums[n-1]銆乶ums[n]锛岀k涓眿閲岀殑閲戦涓簄ums[k-1]锛屽瓙闂f(k)琛ㄧず浠庡墠k涓眿鑳藉伔鍒扮殑鏈€澶ч噾棰濓紝鍋峰墠k涓眿锛屾湁浠ヤ笅涓ょ鏂规锛?/span>

绠楁硶-鍔ㄦ€佽鍒掞紙浜岋級

  1. 鍋风k涓眿锛岄偅绗琸-1涓眿灏变笉鑳藉伔锛屽惁鍒欎細鎶ヨ锛屾墍浠?/span>

    f(k)=nums[k-1]+f(k-2)銆?br>

  2. 涓嶅伔绗琸涓眿锛屾墍浠ユ垜浠彲浠ュ伔鍓峩-1涓眿锛屾墍浠(k)=f(k-1)銆?/span>

  3. 缁间笂涓ゆ锛屽伔鍓峩涓眿锛屾渶澶ч噾棰濅负锛?br>f(k)=max(f(k-1) , nums[k-1]+f(k-2)锛屼篃濉笂浜嗕笂鏂囦腑鎵€璇寸殑f(k)鐢眆(k-1)f(k-2)鍐冲畾鐨勫潙銆?/span>

  4. 鍦ㄥ啓閫掓帹鍏崇郴鐨勬椂鍊欙紝瑕佹敞鎰弅=0鏃讹紝f(0)=0锛沰=1鏃秄(1)=nums[0]銆?/span>

涓夈€佺‘瀹氥€愬~琛ㄣ€戠殑璁$畻椤哄簭銆?/strong>


        涓€鑸儏鍐典笅鍔ㄦ€佽鍒掗兘鏄嚜浣庤€屼笂鐨勭殑璁$畻椤哄簭銆?br>

浠g爜锛?br>

public int rob(int[] nums){ int len=nums.length;    if(len <1){ return 0; } if(len<2){ return nums[0]; } int[] dp = new int[len+1]; dp[0]=0; dp[1]=nums[0]; for(int k=2;k<=len;k++){ dp[k]=Math.max(dp[k-1],nums[k-1]+dp[k-2]); } return dp[len];}

澶嶆潅搴﹀垎鏋?/span>

  • 鏃堕棿澶嶆潅搴︼細O(N)锛岄渶瑕佸埌nums鍏ㄩ儴閬嶅巻涓€娆°€?/span>

  • 绌洪棿澶嶆潅搴︼細O(N)锛屾垜浠渶瑕佺敤dp鏁扮粍鏉ヤ繚瀛樻墍鏈夌殑杩囩▼鍊?/span>銆?/span>


鍥涖€佺┖闂翠紭鍖栥€?/strong>

        鍦ㄤ笂闈㈣В娉曚腑鎴戜滑闇€瑕佷竴涓猯en+1闀跨殑鏁扮粍dp鏉ヤ繚瀛樻墍鏈夌殑杩囩▼鍊硷紝浣嗘牳蹇冧唬鐮侊細dp[k]=Math.max(dp[k-1],nums[k-1]+dp[k-2]);浠g爜閲屾垜浠彧鍏崇郴dp[k-1]鍜宒p[k-2]杩欎袱涓€硷紝鍏朵粬浣嶇疆鐨勫€兼槸鍟ワ紝鎴戜滑骞朵笉鍏冲績锛屼篃鏃犻渶淇濆瓨锛屾墍浠ヨ繖灏辨槸鎴戜滑浼樺寲鐨勭偣锛屾垜浠彲浠ヤ粎鐢∣(1)鐨勭┖闂村氨鍙互瑙e喅銆?/span>

浠g爜锛?br>

public int rob_1(int[] nums){ int len=nums.length;    if(len <1){ return 0; } if(len<2){ return nums[0];    } int prev=nums[0]; int curr=Math.max(prev,nums[1]); for(int k=2;k<len;k++){ int temp = curr; curr= Math.max(curr,nums[k]+prev); prev=temp; } return curr;}

澶嶆潅搴﹀垎鏋?/span>

  • 鏃堕棿澶嶆潅搴︼細O(N)锛岄渶瑕佸埌nums鍏ㄩ儴閬嶅巻涓€娆°€?/span>

  • 绌洪棿澶嶆潅搴︼細O(N)锛屾垜浠彧淇濆瓨浜嗗墠涓や釜鎴垮眿鐨勬渶澶ч噾棰?/span>銆?/span>



绠楁硶-鍔ㄦ€佽鍒掞紙浜岋級涓嶇Н璺锛屾棤浠ヨ嚦鍗冮噷銆?/strong>

鏂囩珷鏈夊府鍔╃殑璇濓紝鐐逛釜杞彂銆佸湪鐪嬪憲绠楁硶-鍔ㄦ€佽鍒掞紙浜岋級銆?/strong>

璋㈣阿鏀寔鍝?(*^__^*)

END


绠楁硶-鍔ㄦ€佽鍒掞紙浜岋級馃憞

以上是关于绠楁硶-鍔ㄦ€佽鍒掞紙浜岋級的主要内容,如果未能解决你的问题,请参考以下文章

绠楁硶鍔ㄦ€佽鍒掞紙浜旓級-鑳屽寘闂2

绠楁硶-鍔ㄦ€佽鍒掞紙涓夛級

绠楁硶-鍔ㄦ€佽鍒掞紙鍥涳級

绠楁硶鍔ㄦ€佽鍒掞紙涓冿級-鑳屽寘闂4

濡備綍鍚戜竴涓洓宀佸皬瀛╄В閲婂姩鎬佽鍒掞紵

Scratch涓棿鎺ュ疄鐜板缁存暟缁勬敮鎸侊紙浜岋級