算法面试——动态规划:0-1背包、最长子序列

发布时间:2026/8/10 6:24:33
算法面试——动态规划:0-1背包、最长子序列 一、0-1 背包publicintknapsack(int[]weights,int[]values,intcapacity){intnweights.length;int[][]dpnewint[n1][capacity1];for(inti1;in;i){for(intw1;wcapacity;w){if(weights[i-1]w){dp[i][w]dp[i-1][w];}else{dp[i][w]Math.max(dp[i-1][w],dp[i-1][w-weights[i-1]]values[i-1]);}}}returndp[n][capacity];}二、最长递增子序列publicintlengthOfLIS(int[]nums){intnnums.length;int[]dpnewint[n];Arrays.fill(dp,1);intmaxLen1;for(inti1;in;i){for(intj0;ji;j){if(nums[j]nums[i]){dp[i]Math.max(dp[i],dp[j]1);}}maxLenMath.max(maxLen,dp[i]);}returnmaxLen;}三、最长公共子序列publicintlongestCommonSubsequence(Stringa,Stringb){intma.length(),nb.length();int[][]dpnewint[m1][n1];for(inti1;im;i){for(intj1;jn;j){if(a.charAt(i-1)b.charAt(j-1)){dp[i][j]dp[i-1][j-1]1;}else{dp[i][j]Math.max(dp[i-1][j],dp[i][j-1]);}}}returndp[m][n];} 觉得有用的话点赞 关注【张老师技术栈】吧