动态规划
hxkovo
这个作者很懒,什么都没留下…
展开
-
LC416 分割等和子集
题目描述:class Solution { public boolean canPartition(int[] nums) {//先求和,然后分成两半// sum/2看成是一个背包,能正好装满说明可以分成两个相等的子集// 实际上也是一个动态规划的问题:背包 int sum = 0; int n = nums.length; for (int i = 0; i < n; i++) { sum += nums[原创 2021-09-21 00:12:09 · 111 阅读 · 0 评论 -
lc887 鸡蛋掉落
题目描述:代码如下:class Solution { HashMap<String, Integer> map; public int superEggDrop(int k, int n) { map = new HashMap<>(); //状态:当前拥有的鸡蛋,需要测试的楼层 //选择:选择去哪一层扔,循环遍历所有的选择 return dp(k,n); } int原创 2021-09-16 17:33:54 · 111 阅读 · 0 评论 -
kmp算法解决strStr()
题目描述:代码如下:class Solution { public int strStr(String haystack, String needle) { if (needle == null || needle.length() == 0) { return 0; } Kmp kmp = new Kmp(needle); return kmp.search(haystack); }}原创 2021-09-12 10:16:21 · 96 阅读 · 0 评论 -
剑指14 剪绳子
题目描述:代码如下:class Solution { //dp[i]表示长度为i的绳子得到的最大乘积 public int cuttingRope(int n) { //长度为n int dp[] = new int[n+1]; // 长度最短都为1,初始化 Arrays.fill(dp, 1); dp[2]=1; for (int i = 3; i <n+1 ; i++) {.原创 2021-08-30 00:26:14 · 44 阅读 · 0 评论 -
LC1143 最长公共子序列
题目描述:代码如下:动态规划class Solution { public int longestCommonSubsequence(String text1, String text2) { int m=text1.length(); int n=text2.length();int dp[][]=new int[m+1][n+1];ini(dp,m,n);//初始化dp//dp[i][j]相当于长度为i的text1与长度为j的text2 的最长原创 2021-07-14 00:19:14 · 115 阅读 · 0 评论 -
剑指42 连续子数组的最大和
题目描述:代码如下:class Solution { public int maxSubArray(int[] nums) { if(nums==null||nums.length==0){ return 0; }int length=nums.length;int dp[]=new int[length];//dp[i]相当于以nums[i]为结尾的字数组的最大和dp[0]=nums[0];for( int i=1;i&原创 2021-07-13 22:53:13 · 44 阅读 · 0 评论 -
LC354 俄罗斯套娃信封问题
题目描述:代码如下:class Solution { public int maxEnvelopes(int[][] envelopes) {//[w][h] 处理,对w升序,对h降序 因为对于相同w只能放入一个 相当于一个一维的最长子序列 Arrays.sort(envelopes, new Comparator<int[]>() { @Override public int compare(int[] o1, .原创 2021-07-13 22:22:51 · 73 阅读 · 0 评论 -
LC300 最长递增子序列
题目描述:代码如下:class Solution { public int lengthOfLIS(int[] nums) {int leng=nums.length;int dp[]=new int[leng];for(int index=0;index<leng;index++){//初始化dp数组 dp[index]=1;}//dp[i]表示nums[i]中的到这个数字的最长递增序列for(int i=0;i<leng;i++){ for(原创 2021-07-13 21:45:44 · 50 阅读 · 0 评论 -
LC322 零钱兑换
题目描述:使用动态规划解决:方法一:自顶向下(递归备忘录)class Solution { public int coinChange(int[] coins, int amount) { int def[]=new int[amount+1]; //备忘录数组 数组长度为amount+1 //目的是为了记录每一个目标为amount所用硬币的最优解 return dp(c.原创 2021-07-11 00:53:58 · 60 阅读 · 0 评论