DP:子数组模型

一、最大子数组和

. - 力扣(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);
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot之SpringBoot整合MyBatis

本章详情 使用SpringBoot和MyBatis通过注解的方式操作数据库使用SpringBoot和MyBatis通过XML配置文件的方式操作数据库 项目搭建 1. 打开idea,选择Create New Project 2.选择Spring Initializer,然后点击Next 3.填写组织&#xff0c;坐标等信息&#xff0c;然后点击Next 4.选…

Qt | QObject 类中的成员函数存取属性值与动态属性、用反射机制获取属性的信息

1、注册自定义类型与 QMetaType 类 ①、QMetaType 类用于管理元对象系统中命名的类型,该类用于帮助 QVariant 中的类型以及队列中信号和槽的连接。它将类型名称与类型关联,以便在运行时动态创建和销毁该名称。 ②、QMetaType::Type 枚举类型定义了 QMetaType 支持的类型。其…

婴儿专用洗衣机有必要吗?精选4款品质婴儿洗衣机疯狂安利!

宝宝衣服的清洗对父母来说都很重要&#xff0c;所以挑选一款适合宝宝的小型洗衣机显得尤为重要。也许有许多人认为&#xff0c;为婴儿购买独立的洗衣机是不必要的&#xff0c;但是你是否了解呢&#xff1f;新生婴儿的肌肤要比成人更脆弱&#xff0c;更易受到感染而受到伤害&…

无人零售革新购物体验

无人零售革新购物体验 在智能化技术不断进步的今天&#xff0c;无人零售作为一种整合了尖端科技的新型零售方式&#xff0c;正在快速转变我们的消费体验。这种零售模式&#xff0c;凭借其高效与便捷性&#xff0c;不仅极大地丰富了消费者的购物方式&#xff0c;同时也为零售行…

xss.pwnfunction-Ah That‘s Hawt

<svg/onloadalert%26%2340%3B1%26%2341%3B> <svg/>是一个自闭合形式 &#xff0c;当页面或元素加载完成时&#xff0c;onload 事件会被触发&#xff0c;从而可以执行相应的 JavaScript 函数

flask 访问404

当你的项目有自己的蓝图&#xff0c;有添加自己的前缀&#xff0c;也注册了蓝图。 在访问的路由那里也使用了自己的蓝图&#xff0c;如下图 然后你访问的地址也没问题&#xff0c;但是不管怎么样访问就是返回404&#xff0c;这个时候不要怀疑你上面的哪里配置错误&#xff0c;…

JVM规范中的运行时数据区

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

[网鼎杯 2020 玄武组]SSRFMe-反弹shell

[网鼎杯 2020 玄武组]SSRFMe 因为用常规方法一直写不出来&#xff0c;所以就换了一种 反弹shell 参考文章 很经典的一道CTF-WriteUP[网鼎杯 2020 玄武组]SSRFMe - FreeBuf网络安全行业门户

大厂Java笔试题之判断字母大小写

/*** 题目&#xff1a;如果一个由字母组成的字符串&#xff0c;首字母是大写&#xff0c;那么就统计该字符串中大写字母的数量&#xff0c;并输出该字符串中所有的大写字母。否则&#xff0c;就输出* 该字符串不是首字母大写*/ public class Demo2 {public static void main(St…

[dvwa] sql injection

sql injection 0x01 low sql语句没有过滤 经典注入&#xff0c;通过逻辑or为真相当于select * from users where true&#xff0c;99换成1也成 用union select 对齐列数&#xff0c;查看数据库信息 1’ union select 1,2# order by探测对齐列数更方便 1’ or 11 order b…

盛最多水的容器(双指针)

11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 …

爱因斯坦求和约定 含代码

目录 一、简介 1.自由标 2.哑标 二、torch实现 1.计算迹 2.取矩阵对角线 3.计算外积 4.batch矩阵乘法 5.带有子列表和省略号 6.变换维度 7.双线性变换&#xff0c;类似于torch.nn.functional.bilinear 一、简介 爱因斯坦求和约定(Einstein summation convention)是一…

Execute-Assembly(1)

原理 在《Cobalt Strike 原理分析》一文中&#xff0c;介绍了内存加载程序集(Assembly)的主要有四步&#xff1a; 1 加载CLR环境 2 获取程序域 3 装载程序集 4 执行程序集 在odzhan的Shellcode: Loading .NET Assemblies From Memory所描述的那样&#xff0c;.Net Framework随着…

MySQL 嵌套查询

嵌套查询 是指在一个完整的查询语句之中&#xff0c;包含若干个不同功能的小查询&#xff1b;从而一起完成复杂查询的一种编写形式。包含的查询放在&#xff08;&#xff09;里 &#xff0c; 包含的查询出现的位置&#xff1a; 位置含义SELECT之后把查询结果作为表头使用FROM…

【InternLM】茴香豆:搭建你的RAG智能助理

茴香豆是 InternLM开源的基于 LLM的群聊知识助手&#xff0c;其提供了一整套前后端 web、android、算法源码&#xff0c;支持工业级商用。其最低运行运行成本低至 1.5G 显存&#xff0c;无需训练适用各行业。 1. 技术报告 参照技术报告HuixiangDou: Overcoming Group Chat Sc…

【DM8】外部表

外部表是指不存在于数据库中的表。 通过向达梦数据库定义描述外部表的元数据&#xff0c;可以把一个操作系统文件当成一个只读的数据库表&#xff0c;对外部表将像普通定义的表一样访问。 外部表的数据存储在操作系统文件中&#xff0c;建立外部表的时候&#xff0c;不会产生…

百度驾驶证C++离线SDK V1.1 C#接入

百度驾驶证C离线SDK V1.1 C#接入 目录 说明 效果 项目 代码 下载 说明 自己根据SDK封装了动态库&#xff0c;然后C#调用。 SDK包结构 效果 项目 代码 using Newtonsoft.Json; using OpenCvSharp; using System; using System.Collections.Generic; using System.D…

Taro打包生成不同目录

使用taro init创建taro项目时&#xff0c;taro默认打包目录是&#xff1a; /config/index.js outputRoot:dist默认的目录&#xff0c;编译不同平台代码时就会覆盖掉&#xff0c;为了达到多端同步调试的目的&#xff0c;这时需要修改默认生成目录了&#xff0c;通过查看官方文…

大语言模型如何工作?

此为观看视频How Large Language Model works的笔记。 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一个大语言模型&#xff08;LLM&#xff09;&#xff0c;可以生成类似人类的文本。本文阐述&#xff1a; 什么是LLMLLM如何工作LLM的应用场景 什么是…

一些 MaxCompute 日常优化案例分享

作者&#xff1a;开七 一、前言 MaxCompute 优化是一个多样而又重要的过程&#xff0c;优化过程中若能够深入理解 ODPS 的工作原理和内部机制&#xff0c;才能够更明确的发现运行过程中存在的问题&#xff0c;这样才能更有针对性地进行优化&#xff0c;优化需要不断思考和尝试…