C++刷题强训(day10)--最长回文子串、买股票的最好时期(一)、过河卒

目录

1、最长回文子串

1.1 题目

1.2 思路

1.3 代码实现

2、买卖股票的最好时机

2.1 题目

2.2 思路

2.3 代码实现

3、过河卒 

3.1 题目

3.2 思路

3.3 代码实现


1、最长回文子串

1.1 题目

1.2 思路

根据题目可知,在一个长度为n的字符串中求得最长回文子串的长度,回文子串可以理解为对称的字符串。因为具有对称性,那么就可一使用中心拓展的思路,依次遍历字符串,每一个字符向两边拓展,直至结束。

1.3 代码实现

注意一下字符串的长度要分奇数和偶数的情况

class Solution 
{
public:
    int getLongestPalindrome(string A) 
    {
        int left =0,right = 0,ret = 0;
        //当字符串长度为偶数时
        for(int i = 0; i < A.size();i++)
        {
            left = i,right = i+1;
            while(left >= 0 && right <=A.size() && A[left] == A[right])
            {
                left--,right++;
            }
            ret = max(ret,right-left-1);
        }
        //为奇数
        for(int j = 0; j < A.size();j++)
        {
            left = j,right = j;
            while(left >= 0 && right <=A.size() && A[left] == A[right])
            {
                left--,right++;
            }
            ret = max(ret,right-left-1);
        }
        return ret;
    }
};

2、买卖股票的最好时机

2.1 题目

2.2 思路

根据题目只能买卖一次,求得获得利润的最高收益,无论亏损多少,只要没有利润就输出0。那么我们首先就能暴力求解,遍历数组求得每一组的利润,返回最大值,但是暴力求解用了两层for循环,所以会超时。

因此需要再次基础上做优化,暴力求解是回溯重复了太多次,所以我们逆向思维,先考虑卖出的价值,然后就只需要求得该卖点之前的最小价值即可,得到的差就是最大值。

理清思路,接下来就是代码实现。

2.3 代码实现

注意一下,minval和ret的顺序,先求最小值,要考虑自身位置,这样利润最小也是0,不会为负

#include <iostream>
using namespace std;

int main() 
{
    int n = 0;
    cin >> n;
    int arr[n];
    for(int i = 0;i < n;i++)
        cin >> arr[i];
    int ret = 0,minval = arr[0];
    for(int i= 0; i < n;i++)
    {
        minval = min(arr[i],minval);
        ret = max(ret,arr[i]-minval);
    }
    cout << ret << endl;

    return 0;
}

3、过河卒 

3.1 题目

3.2 思路

这是一道经典的动态规划题,读完题,要注意马能到达及其所在的位置不能走,马一开始就给出了固定点,且题中也给出了,马能跳跃的点与其所在位置的关系。

注意:

  • 棋盘的大小是(n+1,m+1)。
  • 注意边界控制,从[1,n+1][1,m+1]遍历
  • 分情况:
    • a.判断马的控制点阻塞路径,和重合问题
    • b.正常执行状态转移方程dp[i][j] = dp[i][j-1] + dp[i-1][j]

创建dp表时,多一行,多一列,初始化dp[0][0] = 0; dp[0][1]或者dp[1][0] = 1;

3.3 代码实现

这道题数据范围很大所以记得用 long long初始化dp表

#include <iostream>
using namespace std;

long long dp[24][24];

int main() 
{
    int n,m,x,y;
    cin >> n >> m >> x >> y;
    dp[0][1] = 1;
    x += 1, y+=1;//dp表创建的时候多了一行多了一列,为了找原数组映射
    for(int i = 1; i <= n+1;i++)
    {
        for(int j = 1;j <= m+1;j++)
        {                           //马能走到的位置           马自身的位置
            if( i != x && j != y && abs(i-x)+abs(j-y) == 3 || (i==x && j== y))
                dp[i][j] = 0;
            else
             dp[i][j] = dp[i][j-1] + dp[i-1][j];
        }
    }

    cout <<  dp[n+1][m+1] << endl;

    return 0;
}


本篇完,下篇见!

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

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

相关文章

【蓝桥杯C/C++】翻转游戏:多种实现与解法解析

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: 蓝桥杯C/C 文章目录 &#x1f4af;题目&#x1f4af;问题分析解法一&#xff1a;减法法解法二&#xff1a;位运算解法解法三&#xff1a;逻辑非解法解法四&#xff1a;条件运算符解法解法五&#xff1a;数组映射法不同解法的比较…

Debezium-BinaryLogClient

文章目录 概要核心流程技术名词解释技术细节小结 概要 BinaryLogClient类&#xff0c;用于连接和监听 MySQL 服务器的二进制日志&#xff08;binlog&#xff09; 核心流程 技术名词解释 ### GTID (Global Transaction Identifier) 理解 #### 定义 GTID&#xff08;Global Tra…

嵌入式linux中QT信号与槽基本操作与实现

大家好,今天主要给大家分享一下,如何使用linux系统上的QT进行界面开发与实现。 第一:QT的信号与槽基本简介 在操作QT的时候,可以使用里面的信号与槽。所谓信号就是一个对象发出的信号,槽就是当这个对象发出这个信号时,对应连接的槽就发被执行或者触发。 进行信号与槽的连…

03 —— Webpack 自动生成 html 文件

HtmlWebpackPlugin | webpack 中文文档 | webpack中文文档 | webpack中文网 安装 npm install --save-dev html-webpack-plugin 下载html-webpack-plugin本地软件包 npm i html-webpack-plugin --save-dev 配置webpack.config.js让webpack拥有插件功能 const HtmlWebpack…

大模型时代的具身智能系列专题(十二)

Robert Platt(波士顿动力) Robert Platt是美国东北大学Helping Hands机器人实验室主任、计算机科学教授。在加入东北大学之前&#xff0c;Platt 曾是麻省理工学院的研究科学家和美国宇航局的机器人工程师。platt博士毕业于马萨诸塞大学阿默斯特分校计算机科学专业。Platt 的工…

【软件测试】设计测试用例的万能公式

文章目录 概念设计测试用例的万能公式常规思考逆向思维发散性思维万能公式水杯测试弱网测试如何进行弱网测试 安装卸载测试 概念 什么是测试用例&#xff1f; 测试⽤例&#xff08;Test Case&#xff09;是为了实施测试⽽向被测试的系统提供的⼀组集合&#xff0c;这组集合包…

uni-app Vue3语法实现微信小程序样式穿透uview-plus框架

1 问题描述 我在用 uni-app vue3 语法开发微信小程序时&#xff0c;在项目中使用了 uview-plus 这一开源 UI 框架。在使用 up-text 组件时&#xff0c;想要给它添加一些样式&#xff0c;之前了解到微信小程序存在样式隔离的问题&#xff0c;也在uview-plus官网-注意事项中找到…

C++(Qt)软件调试---内存分析工具Heob(26)

C(Qt)软件调试—内存分析工具Heob&#xff08;26&#xff09; 文章目录 C(Qt)软件调试---内存分析工具Heob&#xff08;26&#xff09;[toc]1、概述&#x1f41c;2、环境配置&#x1fab2;3、功能说明4、使用Heob分析qt 程序内存泄漏&#x1f9a7;5、使用Heob检测qt 程序野指针…

uni-app快速入门(八)--常用内置组件(上)

uni-app提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…

静态时序分析--时序约束

目录 1.时钟约束1.1创建时钟1.2.生成时钟1.3虚拟时钟1.4 最小时钟脉宽 2.I/O延时约束2.1设置输入延时2.2设置输出延时 3.I/O环境建模约束3.1输入驱动建模3.2输出负载建模 4.时序例外4.1多周期路径设置&#xff08;multicycle path&#xff09;4.2伪路径设置&#xff08;false_p…

解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件

勾选Auto-detect proxy setting并填入 https://plugins.jetbrains.com 代理URL&#xff0c;可以先做检查连接&#xff1a;

自存 sql常见语句和实际应用

关于连表 查询两个表 SELECT * FROM study_article JOIN study_article_review 查询的就是两个表相乘&#xff0c;结果为两个表的笛卡尔积 相这样 这种并不是我们想要的结果 通常会添加一些查询条件 SELECT * FROM study_articleJOIN study_article_review ON study_art…

目录背景缺少vscode右键打开选项

目录背景缺少vscode右键打开选项 1.打开右键管理 下载地址&#xff1a;https://wwyz.lanzoul.com/iZy9G2fl28uj 2.开始搜索框搜索vscode&#xff0c; 找到其源目录 3.目录背景里面&#xff0c; 加入vscode.exe 3.然后在目录背景下&#xff0c; 右键&#xff0c; code就可以打…

应用于各种小家电的快充协议芯片

前言 随着快充技术的广泛应用&#xff0c;以往小家电的慢充模式已经满足不了人们对充电速度的要求&#xff0c;因此商家纷纷对小家电应用了诱骗取电快充协议芯片 例如&#xff08;XSP16H)&#xff0c;有了快充的支持小家电的充电速度有了很大的提升&#xff0c;节省了很多的充电…

Java基础知识(五)

文章目录 ObjectObject 类的常见方法有哪些&#xff1f; 和 equals() 的区别hashCode() 有什么用&#xff1f;为什么要有 hashCode&#xff1f;为什么重写 equals() 时必须重写 hashCode() 方法&#xff1f; 参考链接 Object Object 类的常见方法有哪些&#xff1f; Object 类…

【spring 】Spring Cloud Gateway 的Filter学习

介绍和使用场景 Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关&#xff0c;它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中&#xff0c;Filter 扮演着非常重要的角色&#…

[Docker#11] 容器编排 | .yml | up | 实验: 部署WordPress

目录 1. 什么是 Docker Compose 生活案例 2. 为什么要使用 Docker Compose Docker Compose 的安装 Docker Compose 的功能 使用步骤 核心功能 Docker Compose 使用场景 Docker Compose 文件&#xff08;docker-compose.yml&#xff09; 模仿示例 文件基本结构及常见…

学习虚幻C++开发日志——委托(持续更新中)

委托 官方文档&#xff1a;Delegates and Lamba Functions in Unreal Engine | 虚幻引擎 5.5 文档 | Epic Developer Community | Epic Developer Community 简单地说&#xff0c;委托就像是一个“函数指针”&#xff0c;但它更加安全和灵活。它允许程序在运行时动态地调用不…

【Linux】基础02

Linux编译和调试 VI编辑文件 vi : 进入文件编辑 是命令行模式 i &#xff1a;从光标处进入插入模式 dd : 删除光标所在行 n dd 删除指定行数 Esc &#xff1a; 退出插入模式 &#xff1a; 冒号进入末行模式 :wq : 保存退出 :q &#xff1a; 未修改文件可以退出 :q! …

前端:JavaScript (学习笔记)【1】

目录​​​​​​​ 一&#xff0c;介绍JavaScript 二&#xff0c;JavaScript的特点 1&#xff0c;脚本语言 2&#xff0c;基于对象的语言 3&#xff0c;事件驱动 4&#xff0c;简单性 5&#xff0c;安全性 6&#xff0c;跨平台性 7&#xff0c;JS 和java的区别 &…