找工作准备刷题Day14 回溯算法 (卡尔41期训练营 7.29)

第一题:Leetcode376. 摆动序列

题目描述

解题思路

使用两个变量:preDiff 和 curDiff,分别记录 前一次相邻元素差值和 此处相邻元素值之差,只有当preDiff 和 curDiff 符号不同,摆动序列长度加一。

初始:长度为1。

题解1——贪心:移除坡上的元素。

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int ans = 1;int curDiff = 0, preDiff = 0;for (int i = 0; i < nums.size() - 1; i++) {curDiff = nums[i + 1] - nums[i];if ((preDiff >= 0 && curDiff < 0) ||(preDiff <= 0 && curDiff > 0)) {ans++;preDiff = curDiff;}}return ans;}
};

题解2——动态规划

class Solution {
public:int wiggleMaxLength(vector<int>& nums) {// dp[i][0]表示考虑下标为i的元素以及之前的元素,i作为山峰的最长长度// dp[i][1]表示考虑下标为i的元素以及之前的元素,i作为山谷的最长长度vector<vector<int>> dp(nums.size() + 1, vector<int>(2, 0));dp[0][0] = dp[0][1] = 1;for (int i = 1; i < nums.size(); i++) {dp[i][0] = dp[i][1] = 1;for (int j = 0; j < i; j++) {// i作为山峰if (nums[i] > nums[j])dp[i][0] = max(dp[i][0], dp[j][1] + 1);// i作为山谷if (nums[i] < nums[j])dp[i][1] = max(dp[i][1], dp[j][0] + 1);}}return max(dp[nums.size() - 1][0], dp[nums.size() - 1][1]);}
};

要点

  1.  dp数组的意义:dp[i][0]表示考虑下标为i的元素以及之前的元素、i作为山峰的最长长度; dp[i]                             [1]表示考虑下标为i的元素以及之前的元素、i作为山谷的最长长度。
  2. 初始化:dp[i][0]和dp[i][1]均初始化为1(表示
    class Solution {
    public:int maxSubArray(vector<int>& nums) {int ans = INT_MIN;int count = 0;for (int i = 0; i < nums.size(); i++) {count += nums[i];if (count > ans) {ans = count;}if (count < 0)count = 0;}return ans;}
    };
    这个元素本身就可以作为波峰或者波谷)。
  3. 递推方法:对于所有j大于0、小于i,依次比较计算dp[i][0]和dp[i][1]

第二题:Letcode53. 最大子数组和

题目描述

题解1

class Solution {
public:int maxSubArray(vector<int>& nums) {int ans = INT_MIN;int count = 0;for (int i = 0; i < nums.size(); i++) {count += nums[i];if (count > ans) {ans = count;}if (count < 0)count = 0;}return ans;}
};

如果 count < 0,则后续计算不加上 nums[i]。

题解2——动态规划

class Solution {
public:int maxSubArray(vector<int>& nums) {vector<int> dp(nums.size()); // dp[i]表示 以0 <= j <= i开始、以 i 结尾// 的最大子数组和dp[0] = nums[0];int ans = dp[0];for (int i = 1; i < nums.size(); i++) {dp[i] = max(dp[i - 1] + nums[i], nums[i]);if (dp[i] > ans) {ans = dp[i];}}return ans;}
};

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

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

相关文章

1.4、存储系统

目录 存储器的层次结构外存&#xff08;辅存&#xff09;内存CPU的寄存器Cache总结举例局部性原理 练习题 高速缓存Cache总结举例总结 练习题 Cache的地址映像方法直接相联映像全相联映像组相联映像练习题 Cache替换算法Cache页面淘汰算法Cache的读写过程练习题 磁盘总结固态硬…

dpdk 响应icmp请求(Echo or Echo Reply Message)

注&#xff1a;对于"Echo or Echo Reply Message"类型的icmp报文&#xff0c;响应报文的Identiy和Sequence Number的值与请求报文的这两个字段的值要相同。 Identifier&#xff08;标识符&#xff09;字段通常由发送方设置&#xff0c;并被用于将ICMP请求与相应的回复…

SQL Server数据库的金钟罩:安全性与访问控制机制全解析

SQL Server数据库的金钟罩&#xff1a;安全性与访问控制机制全解析 在信息时代&#xff0c;数据的价值日益凸显&#xff0c;数据库的安全性和访问控制成为了保护数据不可或缺的手段。SQL Server作为业界领先的关系型数据库管理系统&#xff0c;提供了一套全面而强大的安全机制…

python采集阿里巴巴历年员工人数统计报告

数据为2012到2022财年阿里巴巴每年的全职员工数量。截止2022年3月31日&#xff0c;阿里巴巴共有全职员工254941人&#xff0c;比上年增长3479人。 数据来源于阿里巴巴20-F和F-1文件 按阿里巴巴财政年度进行统计&#xff0c;阿里巴巴财年结束日期为每年3月31日 为全职员工人数 阿…

好用的开源免费录屏工具|OBS录屏参数设置|OBS录屏参数优化|录屏工具科普|OBS如何设置录屏才能不模糊

背景/引言 我的需求 相信这也是大多数用户的录屏需求。 选择一款开源免费的PC录屏软件&#xff08;开源意味着可能需要了解一些参数概念以及如何设置&#xff0c;设置多少的问题&#xff0c;灵活性带来入门门槛的问题&#xff0c;但是相应的也会掌握一些视频相关的知识&…

人工智能与机器学习原理精解【9】

文章目录 马尔科夫过程论基础理论得到马尔可夫链的状态转移概率矩阵计算状态转移概率的常见方法1. 实验观察2. 历史数据分析3. 理论假设4. 使用统计模型 示例计算Python代码示例例子Python代码验证 马尔可夫链的状态转移概率矩阵例子例题 马尔可夫链例子例子例题 概率测度定义原…

WireShark 更改界面主题

背景 Windows 是黑色主题 安装 WireShark 后&#xff0c;WireShark 界面也是黑色主题 预期 想要将 WireShark 界面更改为白色主题 操作 启动 wireshark 时添加 -platform windows:darkmode0 参数 <Wireshark.exe 路径> -platform windows:darkmode0 例&#xff1a;…

面试题:如何验证代码的可靠性

代码结构上的&#xff1a; 1 可扩展性 是否否和开闭原则 2 性能&#xff0c;数据结构用的是否合理&#xff0c;算法等是否效率高。 3 安全性 是否存在潜在的安全 整数溢出 SQL注入 等 4 代码复杂度 圈负杂度 if嵌套深度 函数长度等 5 函数变量的命名是否具有自解释性 1. …

Vue进阶之Vue无代码可视化项目(八)

Vue无代码可视化项目 右侧栏配置——配置面板右侧栏配置RightPanel.vueTextSetting.vueImageSetting.vueChartSetting.vue右侧栏和中间区域联动TextSetting.vueImageSetting.vuesrc/blocks/BlockRenderer.vuesrc/blocks/internal/TextBlock.vuesrc/blocks/internal/ImageBlock.…

echarts所遇到的问题,个人记录

TreeMap 矩形树图&#xff0c;label设置富文本之后&#xff0c;无法垂直居中 font-size 支持rem&#xff0c;其余不支持 font-size 支持 rem&#xff0c;但是其余的属性如height&#xff0c;width等不支持 echarts-for-react 绑定事件&#xff0c;会覆盖实例上绑定的 当给cha…

[C++探索]初始化列表,static成员,友元函数,内部类,匿名对象

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…

Linux基础操作指令

Linux的操作特点&#xff1a;纯命令行&#xff08;虽然也有图形化界面&#xff0c;但主要是工程师使用&#xff0c;意义不大&#xff09; windows的操作特点&#xff1a;图形化界面&#xff08;也有纯命令行的形式&#xff0c;但其更贴近大众&#xff0c;命令行学习成本高&…

服务暴露 traefik

一。traefik 部署 前置资源 还是那个网站&#xff0c;这里复制 entryPoints&#xff0c;进入traefik的大门 可选在哪台机器上部署 traefik 部署 用 Daemonset 的方式是为了&#xff0c;加机器到集群后&#xff0c;能自动部署traefik 到目标机器 注意 8084端口 必须加…

一种多策略改进黑翅鸢智能优化算法IBKA(2024年新出优化算法)种群初始化精英反向+透镜成像反向学习+黄金正弦变异策略

一种多策略改进黑翅鸢智能优化算法IBKA&#xff08;2024年新出优化算法&#xff09; 种群初始化精英反向策略透镜成像反向学习策略黄金正弦变异策略 文章目录 前言一种多策略改进黑翅鸢智能优化算法IBKA&#xff08;2024年新出优化算法&#xff09; 种群初始化精英反向策略透镜…

sentinel 服务流量控制 、熔断降级

1、什么是 sentinel,可以用来干什么 sentinel是用来在微服务系统中保护微服务对的作用,如何避免服务的雪崩、熔断、降级,说白了就是用来替换hystrix。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 官网:GitHub - alibaba/Se…

sqlilabs解题方法

Lass1 查询id为1的用户名和密码 查询id为2的用户名和密码 没有回显&#xff0c;不含id-1的行 判断字段数&#xff0c;字段数为3 查询数据库用户名&#xff0c;和数据库名 查询时id必须超出数据库以外&#xff0c;一般用-1 用户名&#xff1a;user() 数据库名&#xff1a;databa…

【电路笔记】-共源JFET放大器

共源JFET放大器 文章目录 共源JFET放大器1、概述2、共源JFET放大器3、JFET放大器电流和功率增益共源JFET放大器使用结场效应晶体管作为其主要有源器件,提供高输入阻抗特性。 1、概述 普通源JFET放大器与共射极BJT放大器相比有一个重要优点,即FET具有极高的输入阻抗,再加上低…

COMP9315-install and setup postgresql15.6

学习需要安装一个最新的postgresql版本&#xff0c;参考最新的链接 COMP9315 24T1 - Prac Exercise 01 (unsw.edu.au) 内容待一步一步跟着链接文档操作&#xff1a;

在IDEA中切换分支没有反应

说明&#xff1a;记录一次在IDEA中切换分支没有反应的情况&#xff0c;新建一个分支后&#xff0c;准备暂存代码&#xff0c;切换到其他分支去&#xff0c;发现怎么切都没有反应&#xff0c;也没有切过去&#xff1b; 解决&#xff1a;首先&#xff0c;我想到是不是当前新分支…