首页 > 编程语言 >算法——动态规划(一)

算法——动态规划(一)

时间:2023-06-03 16:02:57浏览次数:19  
标签:int sum len height ++ 算法 动态 规划 dp

1、最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。

 1 public class Solution {
 2     public String longestPalindrome(String s) {
 3         int len=s.length();
 4         boolean dp[][]=new boolean[len][len];
 5         int maxlen=1;
 6         int begin=0;
 7         // 初始化:所有长度为 1 的子串都是回文串
 8         for (int i = 0; i < len; i++) {
 9             dp[i][i] = true;
10         }
11         char[] str=s.toCharArray();
12         for(int l=2;l<=len;l++){//控制子串长度
13             for(int i=0;i<len;i++){
14                 int j=i+l-1;
15                 if(j>=len)break;
16                 if(str[i]!=str[j]){
17                     dp[i][j]=false;
18                 }else{
19                     if(j-i<=2){
20                         dp[i][j] = true;
21                     }else{
22                         dp[i][j]=dp[i+1][j-1];
23                     }
24                 }
25                 if(dp[i][j]&&l>maxlen){
26                 maxlen=l;
27                 begin=i;
28                 }
29             }
30         }
31         return s.substring(begin,begin+maxlen);
32     }
33 }
View Code

2、接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

 

 1 //按行统计
 2 class Solution {
 3     public int trap(int[] height) {
 4         int sum = 0;
 5         int max = getMax(height);//找到最大的高度,以便遍历。
 6         for (int i = 1; i <= max; i++) {
 7             boolean isStart = false; //标记是否开始更新 temp
 8             int temp_sum = 0;
 9             for (int j = 0; j < height.length; j++) {
10                 if (isStart && height[j] < i) {
11                     temp_sum++;
12                 }
13                 if (height[j] >= i) {
14                     sum = sum + temp_sum;
15                     temp_sum = 0;
16                     isStart = true;
17                 }
18             }
19         }
20         return sum;
21     }
22     private int getMax(int[] height) {
23             int max = 0;
24             for (int i = 0; i < height.length; i++) {
25                 if (height[i] > max) {
26                     max = height[i];
27                 }
28             }
29             return max;
30     }
31 }
View Code

3、最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

 1 //无后效性:到第i个位置时,设之前所有元素求和为pre,如果pre > 0,就要它,并加上nums[i]; 如果pre<=0,就不要它,取nums[i]本身。 
 2 public class Solution {
 3 
 4     public int maxSubArray(int[] nums) {
 5         int n=nums.length;
 6         int[] dp = new int[n];
 7         dp[0]=nums[0];
 8         for(int i=1;i<n;i++){
 9             if(dp[i-1]>0){
10                 dp[i]=dp[i-1]+nums[i];
11             }else{
12                 dp[i]=nums[i];
13             }
14         }
15         int sum=nums[0];
16         for(int i=0;i<n;i++){
17             sum=Math.max(sum,dp[i]);
18         }
19         return sum;
20     }
21 }
View Code

4、不同路径

一个机器人位于一个 m x n 网格的左上角 。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。

问总共有多少条不同的路径?

 1 class Solution {
 2     public int uniquePaths(int m, int n) {
 3         int[][] dp = new int[m][n];
 4         for (int i = 0; i < n; i++) dp[0][i] = 1;
 5         for (int i = 0; i < m; i++) dp[i][0] = 1;
 6         for (int i = 1; i < m; i++) {
 7             for (int j = 1; j < n; j++) {
 8                 dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
 9             }
10         }
11         return dp[m - 1][n - 1];  
12     }
13 }
View Code

 

标签:int,sum,len,height,++,算法,动态,规划,dp
From: https://www.cnblogs.com/coooookie/p/17454090.html

相关文章

  • 算法刷题记录:[NOIP1999]回文数
    题目链接https://ac.nowcoder.com/acm/contest/19859/G题目分析高精度相加+进制转换+判断回文的模拟题。AC代码//Problem:[NOIP1999]回文数//Contest:NowCoder//URL:https://ac.nowcoder.com/acm/contest/19859/G//MemoryLimit:262144MB//TimeLimit:20......
  • 技术要求职业规划
    熟练k8s+docker+go,python,java,spring框架,中间件技术等 PAAS平台底座开发,打造轻量化云平台。1.负责大规模存储、可伸缩计算系统的开发和维护;2.负责多种数据分析平台的搭建;3.负责计算和数据分析相关系统的产品化和开放平台的搭建。-负责提供底层存储技术相关解决方案......
  • 数据结构与算法分析课程设计
    1.设计目的数据结构课程设计是学习了数据结构课程后的一个综合性实践教学环节,是对课程理论和课程实验的综合和补充。它主要培养学生综合运用已学过的理论和技能去分析和解决实际问题的能力,对加深课程理论的理解和应用、切实加强学生的实践动手能力和创新能力具有重要意义。2.设计要......
  • javassist动态生成类
    1. 使⽤javassist⽣成类   58来⾃百度百科:Javassist是⼀个开源的分析、编辑和创建Java字节码的类库。是由东京⼯业⼤学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加⼊了开放源代码JBoss 应⽤服务器项⽬,通过使⽤Javassist对字节码操作为JBoss实现动态"AO......
  • js 动态添加样式
    //添加css脚本exportconstloadStyle=url=>{constlink=document.createElement('link');link.type='text/css';link.rel='stylesheet';link.href=url;consthead=document.getElementsByTagName('head&......
  • 算法刷题记录:素数五五
    题目链接https://ac.nowcoder.com/acm/contest/19859/E题目分析一道找规律的题,我们注意33,当33的长度一样,我们只要无脑添加4和8即可。4和8的关系与33的关系:有n个33,就有n-1个4或8。在此基础之上,因为会出现a和b的33长度不相同的情况,这时候我们只要统计a和b的33个数的差就行了......
  • Visual C++ 6.0环境开发PACS影像系统的技术指标和精准算法
    1.技术指标图像文件格式:DCM、JPG、BMP、TIF等可支持显示属性设置:24/32位真彩;256位色(黑白)可支持监视器分辨率:1024﹡768;1280﹡1024;1600﹡1280;1280﹡1600(立式);1536﹡2048(立式);2560﹡2048(立式)图像分辨率:1024﹡1024;512﹡512;256﹡256静态或动态操作平台windowsxpPACS系统-图像处理高级精准算法对图像......
  • 渐入佳境的算法开发,分享一下学习心得
    一、搞算法,从一瞬间的热爱开始我爱创意胜过逻辑,喜欢编写代码超过闷头学习。当我实现自己的第99个创意之后,看着窗外散发着昏黄光晕的夕阳......
  • Vue路由,子路由,动态路由,动态路由参数,路由查询参数
    一、路由、子路由、动态路由子路由、动态路由类似,不同的是子路由同时有路由跳转和页面跳转的,动态路由只有路由跳转,没有页面跳转举例如下:/customerHome 下有 item1 和 item2 两个子路由。import{createRouter,createMemoryHistory,RouteRecordRaw}from'vue-router'......
  • 非监督异常点检测算法总结——没有想到矩阵分解和编码解码器也是一种思路
    非监督异常点检测算法总结 一、基于密度1) d(p,o):两点p和o之间的距离;2)k-distance:第k距离 对于点p的第k距离dk(p)定义如下:p的第k距离,也就是距离p第k远的点的距离,如图。  3)k-distanceneighborhoodofp:第k距离邻域 点p的第k距离邻域Nk(p),就是p的第k距离即以内的所有点,包括......