DP:子数组模型

news2024/11/27 16:26:49

一、最大子数组和

. - 力扣(LeetCode)

 二、环形子数组的最大和

. - 力扣(LeetCode)

 

class Solution {
public:
    int maxSubarraySumCircular(vector<int>& nums) 
    {
       //动态规划思想解决  
       //环形数组问题,尝试转化成普通数组
       int n=nums.size();
       vector<int> f(n);
       f[0]=nums[0];
       auto g=f;
       for(int i=1;i<n;++i)    
       {
         f[i]=max(nums[i],f[i-1]+nums[i]);//最大
         g[i]=min(nums[i],g[i-1]+nums[i]);//最小
       }
       int fmax=*max_element(f.begin(),f.end());
       int gmin=*min_element(g.begin(),g.end());
       int sum=accumulate(nums.begin(),nums.end(),0);
       return sum==gmin?fmax:max(fmax,sum-gmin);//有可能数据全是负数
    }
};

三、乘积的最大子数组

. - 力扣(LeetCode)

class Solution {
public:
    int maxProduct(vector<int>& nums) 
    {
       //动态规划思想解决
       //负负得正可能更大
       //所以需要两个dp表示 一个是最大,一个是最小
       int n=nums.size();
       vector<int> f(n);
       f[0]=nums[0];
       auto g=f;
       for(int i=1;i<n;++i)    
       {
        int x=nums[i];
        if(x>0) 
        {
            f[i]=max(x,x*f[i-1]);
            g[i]=min(x,x*g[i-1]);
        }
        else
        {
            f[i]=max(x,x*g[i-1]);
            g[i]=min(x,x*f[i-1]);
        }
       }
       return *max_element(f.begin(),f.end());
    }
};

四、乘积为正数的最长子数组

. - 力扣(LeetCode)

class Solution {
public:
    int getMaxLen(vector<int>& nums) 
    {
         //动态规划思想解决
       //负负得正可能更大
       //所以需要两个dp表示 一个是为正最长,一个是为负最小
       int n=nums.size();
       vector<int> f(n+1);//f[i]表示到i位置时乘积为正数的最长子数组长度
       auto g=f;//g[i]表示到i位置时乘积为负数的最长子数组长度
       for(int i=1;i<=n;++i)
       {
        if(nums[i-1]>0)
        {
            f[i]=f[i-1]+1;
            g[i]=g[i-1]==0?0:g[i-1]+1; //如果前面是0,那么这个数还是正数的话g[i]=0
        }
        else if(nums[i-1]<0)
        {
            f[i]=g[i-1]==0?0:g[i-1]+1;//如果前面是0,那么这个数还是负数,f[i-1]就还是0
            g[i]=f[i-1]+1;
        }
        //else 本来就是0
           //f[i]=g[i]=0;
       }
       return *max_element(f.begin()+1,f.end());//第一个位置是不能算上的
    }
};

五、等差数组划分

. - 力扣(LeetCode)

class Solution {
public:
    int numberOfArithmeticSlices(vector<int>& nums)
   {
      int n=nums.size();
      vector<int> dp(n);
      for(int i=2;i<n;++i)
        if(nums[i]+nums[i-2]==nums[i-1]*2) dp[i]=dp[i-1]+1;
      return accumulate(dp.begin(),dp.end(),0);
   }
};

六、最长湍流子数组

. - 力扣(LeetCode)

 七、单词拆分

. - 力扣(LeetCode)

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) 
    {
       // 优化⼀:将字典⾥⾯的单词存在哈希表⾥⾯
       unordered_set<string> hash;
       for(auto& s : wordDict) hash.insert(s);
       int n=s.size();
       vector<bool> dp(n+1);
       dp[0]=true;//确保后面填表是正确的
       s=' '+s;//在字符串前加一个空格,确保dp表和s的下标映射是一样的
       //在动规涉及到子串问题常用的技巧
       for(int i=1;i<=n;++i)//开始填表
       {
         for(int j=i;j>=1;--j) //找到第一个满足要求的位置
          {
            if(dp[j-1]==true&&hash.count((s.substr(j,i-j+1)))) 
            {
                dp[i]=true;
                break;
            }
          }
       }
       return dp[n];
    }
};

八、环绕字符串中的唯一子字符串

. - 力扣(LeetCode)

class Solution {
public:
    int findSubstringInWraproundString(string s) 
    {
        //dp[i]表示以i位置结尾有多少子串在base中出现
        int n=s.size();
        vector<int> dp(n,1);
        for(int i=1;i<n;++i)//开始填表
           if((s[i]-s[i-1]+26)%26==1) //说明符合要求
                dp[i]=dp[i-1]+1;
        //但是得去重 (y z a b c 和 a b c)
        // 2. 计算每⼀个字符结尾的最⻓连续⼦数组的⻓度 
        //相同字符的dp值,我们取最大的
        vector<int> hash(26);
        for(int i=0;i <n; ++i)  hash[s[i] - 'a'] = max(hash[s[i]-'a'], dp[i]);
        // 3. 将所有结果累加起来
        return accumulate(hash.begin(), hash.end(), 0);
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC实战——StyleGAN(Style-Based Generative Adversarial Network)

AIGC实战——StyleGAN 0. 前言1. StyleGAN1.1 映射网络1.2 合成网络1.3 自适应实例归一化层1.4 风格混合1.5 随机变化 2. StyleGAN 生成样本3. StyleGAN23.1 权重调制与解调3.2 路径长度正则化3.3 非渐进式增长 4. StyleGAN2 生成样本小结系列链接 0. 前言 StyleGAN (Style-Ba…

STM32F4 IAP跳转APP问题及STM32基于Ymodem协议IAP升级笔记

STM32F4 IAP 跳转 APP问题 ST官网IAP例程Chapter1 STM32F4 IAP 跳转 APP问题1. 概念2. 程序2.1 Bootloader 程序 问题现象2.2. APP程序 3. 代码4. 其他问题 Chapter2 STM32-IAP基本原理及应用 | ICP、IAP程序下载流程 | 程序执行流程 | 配置IAP到STM32F4xxxChapter3 STM32基于Y…

linux-docker安装nginx

1.拉取镜像&#xff1a; docker pull nginx2.创建挂在路径&#xff1a; mkdir -p /usr/local/nginx/conf mkdir -p /usr/local/nginx/logs mkdir -p /usr/local/nginx/www mkdir -p /usr/local/nginx/conf.d 3.启动镜像:为了拿到位置文件&#xff0c;先启动下 docker run -…

本地项目提交 Github

工具 GitIdeaGithub 账号 步骤 使用注册好的 Github 账号&#xff0c;登陆 Github&#xff1b; 创建 Repositories (存储库)&#xff0c;注意填写图上的红框标注&#xff1b; 创建完成之后&#xff0c;找到存储库的 ssh 地址或 https 地址&#xff0c;这取决于你自己的配置…

linux网络知识

七层模型 应用层 为操作系统或者网络应用程序提供网络服务的接口 表示层 解决不同系统之间的通信问题&#xff0c;负责数据格式的转换 会话层 自动收发包&#xff0c;自动寻址&#xff0c;负责建立和断开连接 传输层 将上层数据分段并提供端到端的…

Qt/C++推流组件使用说明

2.1 网络推流 公众号&#xff1a;Qt实战&#xff0c;各种开源作品、经验整理、项目实战技巧&#xff0c;专注Qt/C软件开发&#xff0c;视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。 公众号&#xff1a;Qt入门和进阶&#xff0c;专门介绍Qt/C相关知识点学…

17. 【Android教程】开关控件ToggleButton/Switch

本节要学的两个控件是我们在使用 Android 手机时经常会用到的&#xff0c;相信大家对它并不陌生&#xff0c;甚至是非常熟悉&#xff0c;但是现实是很多开发者并不了解开关控件&#xff0c;所以会花不少功夫通过 TextView 或 Button 来实现开关功能&#xff0c;殊不知 Android …

CSS 实现无限波浪边框卡片

CSS 实现无限波浪边框卡片 效果展示 鼠标悬停效果&#xff0c;底部色块的边框是无限滚动的波浪 鼠标没有悬停效果 CSS 知识点 CSS 基础知识回顾使用 radial-gradient 实现波浪边框使用 anumate 属性实现波浪边框动画和控制动画运动 波浪实现原理 波浪边框的实现思路其…

【产品】ADW300 无线计量仪表 用于计量低压网络的三相有功电能

1 概述 ADW300 无线计量仪表主要用于计量低压网络的三相有功电能&#xff0c;具有体积小、精度高、功能丰富等优点&#xff0c;并且可选通讯方式多&#xff0c;可支持 RS485 通讯和 Lora、2G、NB、4G 等无线通讯方式&#xff0c;增加了外置互感器的电流采样模式&#xff0c;从…

day6 nest商业项目初探·二(java转ts全栈/3R教室)

背景&#xff1a;今天看3r教室开放的这个项目 【美国 | 3.6w】TS全栈&#xff1a;Goflashdeals代购返利网站 &#xff08;2022.09&#xff09; - 3R酷 | 爱自由,不打工&#xff01;一个属于3R会员的社区 (3rku.com)省流&#xff1a;web程序起来了&#xff0c;admin没起来&#…

CUDA 12.4文档2 内核线程架构

本博客参考官方文档进行介绍&#xff0c;全网仅此一家进行中文翻译&#xff0c;走过路过不要错过。 官方网址&#xff1a;https://docs.nvidia.com/cuda/cuda-c-programming-guide/ 本文档分成多个博客进行介绍&#xff0c;在本人专栏中含有所有内容&#xff1a; https://bl…

分享|如何知道自己是不是大数据信用黑名单?

随着大数据技术在金融贷前审核环节中的运用&#xff0c;早在多年前都形成了大数据信用&#xff0c;大数据信用作为辅助的风控工具&#xff0c;作用变得十分重要&#xff0c;其中大数据黑名单就是大数据差的重要一种&#xff0c;那如何知道自己是不是大数据信用黑名单呢?本文详…

Linux:gcc

Linux&#xff1a;gcc gcc概述语言发展史gcc的编译过程预处理编译汇编 gcc的链接过程动态库与静态库 gcc概述 GCC&#xff08;英文全拼&#xff1a;GNU Compiler Collection&#xff09;是 GNU 工具链的主要组成部分&#xff0c;是一套以 GPL 和 LGPL 许可证发布的程序语言编译…

python--正则表达式,元字符,反义符,转义符,位数问题

正则表达式&#xff08;regular expression&#xff09;&#xff1a; 为什么使用正则表达式&#xff1a; 在软件开发过程中&#xff0c;经常会涉及到大量的关键字等各种字符串的操作&#xff0c;使用正则表达式能很大程度的简化开发的复杂度和开发的效率&#xff0c;所以pytho…

麒麟V10安装Redis6.2.6

1、下载redis安装包 Redis各版本下载&#xff1a;https://download.redis.io/releases/ 2、将下载后的.tar.gz压缩包上传到到服务器自定义文件夹下 3、 解压文件 tar -zxvf redis-6.2.6.tar.gzmv redis-6.2.6 redis4、安装redis 在redis文件夹下输入make指令 cd /opt/redi…

【React】react 初学增删改查购物车案例

界面 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>react-购物车案例</title><…

华为OD机试 - 机器人搬砖 - 二分查找(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

centos 7.9 nginx本地化安装,把镜像改成阿里云

1.把centos7.9系统切换到阿里云的镜像源 1.1.先备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup1.2.下载新的CentOS-Base.repo配置文件 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo特别…

css面试题--定位与浮动

1、为什么需要清除浮动&#xff1f; 在非IE浏览器下&#xff0c;容器不设高度且子元素浮动时&#xff0c;容器高度不能被内容撑开&#xff0c;内容会溢出到容器外面而影响布局。这种现象被称为浮动。 浮动的原理&#xff1a;浮动元素脱离文档流&#xff0c;不占用空间&#xff…

39-性能分析(下):APIServer性能测试和调优实战

在API上线之前&#xff0c;我们需要知道API的性能&#xff0c;以便知道API服务器所能承载的最大请求量、性能瓶颈&#xff0c;再根据业务对性能的要求&#xff0c;来对API进行性能调优或者扩缩容。通过这些&#xff0c;可以使API稳定地对外提供服务&#xff0c;并且让请求在合理…