力扣:動態規劃java

sub07 線性DP - O(1) 狀態轉移2_嗶哩嗶哩_bilibili

跳樓梯

class Solution {public int climbStairs(int n) {if (n <= 1) {return 1; // 處理邊界情況}int[] dp = new int[n + 1]; // 創建長度為n+1的數組,比方說跳二級樓梯dp[0] = 1; // 初始值設定dp[1] = 1;for (int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2]; // 狀態轉移方程}return dp[n]; // 返回結果}
}

跳兩級樓梯,那么有零級,一級這兩種,總共是三種,所以說最后的這個下標就是2,int[n+1]

判異,防止n<=1這種異常情況,去判空

爬樓的最少成本:LCR 088. 使用最小花費爬樓梯 - 力扣(LeetCode)

class Solution {public int minCostClimbingStairs(int[] cost) {int len = cost.length;int[] arr = new int[len+1];arr[0]=0;arr[1]=0;for(int i=2;i<=len;i++){arr[i]=min((arr[i-1])+cost[i-1],(arr[i-2]+cost[i-2]));}return arr[len];}public int min(int num1,int num2){return num1>num2? num2:num1;}
}

打家劫舍

LCR 089. 打家劫舍 - 力扣(LeetCode)

class Solution {public int rob(int[] nums) {int len = nums.length;int[] num= new int[len];num[0]=nums[0];for(int i=1;i<len;i++){if(i==1){num[i]=max(nums[0],nums[1]);}else{num[i]=max((num[i-2]+nums[i]),num[i-1]);}}return num[len-1];}public int max(int num1,int num2){return num1>num2?num1:num2;}
}

LCR 090. 打家劫舍 II - 力扣(LeetCode)

class Solution {public int rob(int[] nums) {int n = nums.length;if(n == 1){return nums[0];}else if(n == 2){return max(nums[0],nums[1]);}int[][] dp = new int[n][2];//第二個下標為0表示選擇不選第一個數字dp[0][0]=0;dp[0][1]=nums[0];dp[1][0]=nums[1];dp[1][1]=nums[0];for(int i = 2;i<n;i++){for(int j =0;j<2;j++ ){if(j == 1 && i == n-1){dp[i][j]=dp[i-1][j];}else{dp[i][j]=max(dp[i-2][j]+nums[i],dp[i-1][j]);}}}return max(dp[n-1][0],dp[n-1][1]);}public int max(int a,int b){return a>b?a:b;}
}

91. 解碼方法 - 力扣(LeetCode)

class Solution {public int numDecodings(String s) {int n = s.length();int[] dp = new int[n];for (int i = 0; i < n; i++) {if (i == 0) {//首先對初始值進行處理,如果說第1個數就是0,那么沒有解碼方法,
直接返回一個0if (s.charAt(i) == '0') {return 0;} else {//不然就返回一個1dp[i] = 1;}} else {//對于第二個數開始,下標為1的數字if (s.charAt(i) != '0') {//給它賦一個初值dp[i] = dp[i - 1];}//如果說它和前面一個數滿足在10-26之間,首先前一個數等于1或者2,其次它的值要小于26if (s.charAt(i - 1) == '1' || s.charAt(i - 1) == '2') {//這是求映射的技巧int val = (s.charAt(i - 1) - '0') * 10 + (s.charAt(i) - '0');if (val <= 26) {if (i == 1) {dp[i]++;} else {dp[i] += dp[i - 2];}}}}}return dp[n - 1];}
}

1646. 獲取生成數組中的最大值 - 力扣(LeetCode)

class Solution {public int getMaximumGenerated(int n) {int[] dp = new int[n + 1];//先定義一個長度為n+1的數組if (n == 0) {return 0;} else if (n == 1) {return 1;}dp[0] = 0;dp[1] = 1;int maxDp  =  dp[1];for(int i = 2;i<=n;i++){if(i%2 == 0){dp[i]=dp[i/2];}else{dp[i] = dp[(i-1)/2]+dp[(i-1)/2+1];}maxDp = max(dp[i],maxDp);}//不應該只是比較最后幾個數return maxDp;}public int max(int a, int b) {return a > b ? a : b;}
}

1043. 分隔數組以得到最大和 - 力扣(LeetCode)

class Solution {public int maxSumAfterPartitioning(int[] arr, int k) {int len = arr.length;int[] dp = new int[len];for (int i = 0; i < len; i++) {int maxValue = 0;//因為這個maxValue要在下面這個循環中重復使用for (int j = i; j >= i - k + 1 && j >= 0; --j) {//取分組中的最大值maxValue = Math.max(arr[j], maxValue);if (j == 0) {dp[i] = Math.max(dp[i], +maxValue * (i - j + 1));} else {dp[i] = Math.max(dp[i], dp[j - 1] + maxValue * (i - j + 1));}}}return dp[len - 1];}
}

139. 單詞拆分 - 力扣(LeetCode)


官方題解:

public class Solution {public boolean wordBreak(String s, List<String> wordDict) {Set<String> wordDictSet = new HashSet(wordDict);boolean[] dp = new boolean[s.length() + 1];dp[0] = true;for (int i = 1; i <= s.length(); i++) {for (int j = 0; j < i; j++) {if (dp[j] && wordDictSet.contains(s.substring(j, i))) {dp[i] = true;break;}}}return dp[s.length()];}
}作者:力扣官方題解
鏈接:https://leetcode.cn/problems/word-break/solutions/302471/dan-ci-chai-fen-by-leetcode-solution/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

上述相同,也是判斷前j個是不是真,然后判斷j-i,是不是真,真的話就跳出循環子循環

轉化成Set的作用是提高查找效率

class Solution {public boolean wordBreak(String s, List<String> wordDict) {int len = s.length();Set<String> set = new HashSet(wordDict);boolean[] dp = new boolean[len];for (int i = 0; i < len; i++) {for (int j = i; j >= 0; j--) {if (j == 0) {if (set.contains(s.substring(j, i+1))) {dp[i] = true;break;}} else {if (dp[j-1] && set.contains(s.substring(j, i + 1))) {dp[i] = true;break;}}}}return dp[len - 1];}}

?substring用法substring[i,j),要選擇第j到第i個的元素,用substring(j,i+1)

String s = "hello";// 截取索引1到索引3(不包含)之間的字符,得到"el"
System.out.println(s.substring(1, 3));  // 輸出: el// 截取索引1到索引4(不包含)之間的字符,得到"ell"
System.out.println(s.substring(1, 4));  // 輸出: ell// 截取索引0到索引5(不包含)之間的字符,也就是整個字符串
System.out.println(s.substring(0, 5));  // 輸出: hello// 如果要截取從索引j到索引i(包含i)的字符,就需要使用i+1作為endIndex
int j = 1;
int i = 3;
System.out.println(s.substring(j, i + 1));  // 輸出: ell

LCR 101. 分割等和子集 - 力扣(LeetCode)

class Solution {public boolean canPartition(int[] nums) {int sum = 0;int len = nums.length;for (int i = 0; i < len; i++) {sum += nums[i];}if (sum % 2 == 1) {return false;}int target = sum / 2;boolean[] dp = new boolean[target + 1];dp[0] = true; // 不選取任何元素時,和為0for (int i = 0; i < len; i++) {for (int j = target; j >= nums[i]; j--) {dp[j] = dp[j] || dp[j - nums[i]];}}return dp[target];}
}

416. 分割等和子集 - 力扣(LeetCode)

同上

LCR 103. 零錢兌換 - 力扣(LeetCode)

class Solution {public int coinChange(int[] coins, int amount) {if(amount == 0){return 0;}int len = coins.length;int[] dp = new int[amount+1];dp[0] = 0;// 正確初始化dp數組//因為后面要去取min值所以要去賦最大值for(int i = 1; i <= amount; i++){dp[i] = Integer.MAX_VALUE;}for(int i = 0; i < len; i++){for(int j = coins[i]; j <= amount; j++){// 狀態轉移方程if(dp[j - coins[i]] != Integer.MAX_VALUE){dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);}}}// 檢查是否有解return dp[amount] == Integer.MAX_VALUE ? -1 : dp[amount];}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89698.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89698.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89698.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React Native打開相冊選擇圖片或拍照 -- react-native-image-picker

官方文檔&#xff1a;https://www.npmjs.com/package/react-native-image-picker 場景&#xff1a;點擊按鈕打開相冊選擇圖片或者點擊按鈕拍照 import { launchCamera, launchImageLibrary } from react-native-image-picker;// ... <TouchableOpacityactiveOpacity{0.7}o…

USRP B210生成信號最大帶寬測試之Frank

書接上文&#xff1a; USRP B210生成LFM,SFM,BPSK,Frank信號的最大帶寬測試&#xff08;一&#xff09; USRP B210生成信號最大帶寬測試&#xff08;二&#xff09;SFM USRP B210生成信號最大帶寬測試&#xff08;三&#xff09;LFM USRP B210生成信號最大帶寬測試之BPSK …

pages.json頁面路由中,globalStyle的各個屬性

歡迎來到我的UniApp技術專欄&#xff01;&#x1f389; 在這里&#xff0c;我將與大家分享關于UniApp開發的實用技巧、最佳實踐和項目經驗。 專欄特色&#xff1a; &#x1f4f1; 跨平臺開發一站式解決方案 &#x1f680; 從入門到精通的完整學習路徑 &#x1f4a1; 實戰項目經…

[前端技術基礎]CSS選擇器沖突解決方法-由DeepSeek產生

在 CSS 中&#xff0c;當多個選擇器對同一元素的相同屬性&#xff08;如顏色&#xff09;定義發生沖突時&#xff0c;瀏覽器會通過層疊規則&#xff08;Cascading&#xff09;解決沖突。具體優先級從高到低如下&#xff1a;1. !important 規則&#xff08;最高優先級&#xff0…

解決 IDEA 中 XML 文件的 “URI is not registered” 報錯

解決 IDEA 中 XML 文件的 “URI is not registered” 報錯 在使用 IDEA 開發時&#xff0c;XML 文件&#xff08;尤其是帶有 DTD 約束的配置文件&#xff0c;如 MyBatis、Spring 配置文件&#xff09;常出現 URI is not registered (Settings | Languages & Frameworks | S…

FreeBSD Conda Python3.12下安裝GPT4Free(g4f)0.5.7.3版本

FreeBSD下不能直接安裝g4f&#xff0c;因為Curl_cffi這個庫裝不上。0.5.0.3這個版本不需要這個庫&#xff0c;所以可以安裝。 那么就沒有辦法安裝新版本了嗎&#xff1f; 有的&#xff0c;就是在linux仿真環境下。 Linux仿真環境安裝g4f 最簡單的方法是使用chroot進入linux仿…

Node.js 中基于請求 ID 實現簡單隊列(即時阻止策略/排隊等待策略)

在Node.js 中基于請求 ID 實現簡單隊列 下面示例演示兩種策略&#xff0c;以同一個請求 ID 為單位&#xff1a; 即時阻止策略&#xff1a;如果已有相同 ID 的請求在處理&#xff0c;直接報錯并返回。 排隊等待策略&#xff1a;后續相同 ID 的請求不報錯&#xff0c;而是掛起&…

詳解如何解決Mysql主從復制延遲

解決 MySQL 主從復制延遲需要從架構設計、參數調優、硬件優化等多維度綜合處理。一、根本原因分析主從延遲的本質是&#xff1a;從庫的 SQL 線程重放速度 < 主庫的寫入速度 常見瓶頸點&#xff1a;單線程回放&#xff08;MySQL 5.6 前&#xff09;從庫硬件配置低&…

Spring之事務使用指南

Spring之事務使用指南一、事務的基礎概念1.1 什么是事務&#xff1f;1.2 事務的ACID特性1.3 Spring事務的核心優勢二、Spring事務的核心配置三、事務傳播行為&#xff08;Propagation&#xff09;3.1 常用傳播行為詳解3.1.1 REQUIRED&#xff08;默認值&#xff09;3.1.2 SUPPO…

基于FPGA的多級流水線加法器verilog實現,包含testbench測試文件

目錄 1.課題概述 2.系統仿真結果 3.核心程序 4.系統原理簡介 5.參考文獻 6.完整工程文件 1.課題概述 流水線&#xff08;Pipeline&#xff09;技術源于工業生產中的裝配線理念&#xff0c;在數字電路中&#xff0c;它將一個復雜運算任務分解為若干個子任務&#xff0c;每…

5.1.4習題精講

一、單項選擇題 01. 下列部件不屬于控制器的是&#xff08; C &#xff09;。 題目原文 下列部件不屬于控制器的是&#xff08; &#xff09;。 A. 指令寄存器 B. 程序計數器 C. 程序狀態字寄存器 D. 時序電路 正確答案&#xff1a;C 題目解析 考點分析&#xff1a; 本題考察CP…

華為云Flexus+DeepSeek征文|低代碼 × 強推理:華為云 Flexus 搭建可部署的 AI Agent 實踐方案【搭建寵物養護小知識AI助手】

文章目錄華為云FlexusDeepSeek征文&#xff5c;低代碼 強推理&#xff1a;華為云 Flexus 搭建可部署的 AI Agent 實踐方案【搭建寵物養護小知識AI助手】&#x1f680; 引言一、核心技術概覽1. 華為云 Flexus X2. DeepSeek-R1 模型3. Dify 平臺二、總體架構設計三、環境準備與資…

基于智慧經營系統的學校住宿登記報表分析與應用探究-畢業論文—仙盟創夢IDE

摘要本文聚焦學校住宿場景&#xff0c;以 “未來之窗智慧經營&#xff08;學校住宿&#xff09;” 系統生成的日報表、昨日報表、本月報表為研究對象&#xff0c;深入剖析報表數據結構、功能價值及在住宿管理中的應用。通過解讀水費、電費、押金、房費、總計、訂單等數據維度&a…

arping(ARP協議網絡測試工具)

1. 項目介紹&#xff1a;arping 是一個用于在局域網&#xff08;LAN&#xff09;中查找特定 IP 地址是否被占用的實用工具。與傳統的 ping 命令不同&#xff0c;arping 使用 ARP 協議來發送和接收數據包&#xff0c;從而能夠檢測到那些阻止 ICMP 請求的主機。arping 可以幫助網…

【UE5醫學影像可視化】讀取dicom數據生成2D紋理并顯示

文章目錄1.實現目標2.實現過程2.1 數據準備2.2 創建項目2.3 dcmtk庫集成2.4 流程&原理2.5 材質2.6 應用實現3.參考資料1.實現目標 本文在UE5中讀取本地的dicom文件&#xff0c;解析像素值、窗寬窗位等信息&#xff0c;生成2D紋理&#xff0c;在UE場景中實現簡單的2D醫學影像…

lua(xlua)基礎知識點記錄一

1. 關于 (…) 操作符 編譯階段優化&#xff1a;Lua 編譯器會對常量字符串進行優化處理&#xff0c;將連續的字符串拼接操作 (…) 合并為單個字符串。這種優化僅適用于編譯期確定的常量字符串&#xff0c;不適用于運行時生成的動態字符串。 示例&#xff1a;local str "He…

【Python數據采集】Python爬取小紅書搜索關鍵詞下面的所有筆記的內容、點贊數量、評論數量等數據,繪制詞云圖、詞頻分析、數據分析

Python爬取小紅書搜索關鍵詞下面的所有筆記的內容、點贊數量、評論數量等數據&#xff0c;繪制詞云圖、詞頻分析、數據分析 使用 Python 編寫一個簡單的爬蟲程序來從小紅書抓取與指定關鍵詞相關的筆記數據&#xff0c;并對這些數據進行基本的數據分析&#xff0c;包括詞云圖和…

最大子數組和問題-詳解Kadane算法

最大子數組和問題-詳解Kadane算法一、問題定義與暴力解法1.1 問題描述1.2 暴力解法的低效性二、Kadane算法的核心原理2.1 動態規劃思想的應用2.2 優化空間復雜度三、Kadane算法的Java實現3.1 基礎版本&#xff08;處理所有情況&#xff09;3.2 算法正確性驗證四、Kadane算法的變…

Mongoose網絡庫深度解析:從單線程到多線程的架構演進

0. 引言&#xff1a;C/C網絡編程的困境與突破 在C/C開發領域&#xff0c;網絡編程一直是一個令人頭疼的問題。與Python的requests庫或Go的net/http包不同&#xff0c;C/C缺乏統一的包管理體系和標準化的網絡API。開發者往往需要面對gcc/msvc版本差異、平臺兼容性問題、以及各種…

Jfinal+SQLite處理 sqlite數據庫執行FIND_IN_SET報錯

方法一原代碼sql " and FIND_IN_SET(s.M_ID," ids ")"; 修改為 sql " where s.M_ID"getInSql(ids);public static String getInSql(String ids) {String[] idArray ids.split(",");StringBuilder sql new StringBuilder(" I…