2786. 访问数组中的位置使分数最大

        这并不是一个难题,但是我确实在做题中得到了一些启发,所以记录一下

先讲一讲这个题目的做法:

        首先不难想到这是一个dp问题,(由 i 可以跳到 j ) 而且应该不难, 要不然就不是medium了,doge 那么,暴力的dp就是:

        dp[j] = max (dp[i] + nums  OR dp[j] = dp[i] + nums - x) , i<j, 前面表示nums[i] nums[j] 是同奇偶,后面是nums[i] 和 nums[j]不同奇偶,  时间复杂度是O(n^2),对于 1e5的数据会超时

         那么我们肯定是要优化的,如果做过那个最大数组元素连乘积,就会想到这就是一个dp+分类, 也就是说我们维护一下 上一个是奇数的最大值 上一个是偶数的最大值, (btw, 最大数组元素连乘积 就是维护一下 最大连乘积(正数) 和 最小连乘积(负数))

        后面就没有什么需要赘述的了,还是要看一下数据量和返回值类型 选择long long

        上代码: (我的代码,可以通过)

class Solution {
public:long long maxScore(vector<int>& nums, int x) { //审题一开始在0  初始化有问题long long lastOddMax=nums[0]%2?nums[0]:-x,lastEvenMax=nums[0]%2?-x:nums[0];for(int i=1;i<nums.size();i++){int num=nums[i];if(num%2){// oddlastOddMax=max({lastOddMax,lastOddMax+num,lastEvenMax+num-x});}else{//     evenlastEvenMax=max({lastEvenMax,lastEvenMax+num,lastOddMax+num-x});}} return max(lastEvenMax,lastOddMax);}
};

some thoughts:

        1. 第一次提交的时候,是没有通过的,经过检验发现是题目要求一开始必须在0出发,而我的代码是不要求从0出发的,也就是初始化有问题,这里说一下,既然题目要求了第一次必须从下标0开始 所以就需要赋值成一个nums[0],一个-x,   类似的如果不要求第一个从哪里开始只是要求在奇偶性改变的时候 -x ,就应该赋值成一个nums[0],一个0,可以想一想为什么,这对于想通dp / dfs的初值设置是很有好处的

        2. 第二个事情就是我定义的dp实际上表示的是 从奇数跳转过来的最大值从偶数跳转过来的最大值, 他每次都是和自己比较了一下大小的,所以最后直接返回就是了,但是这是这个题目特殊的子问题的分割方式决定的,更常见的dp是dp[i]表示一定取到nums[i]下的最优值,之后用一个循环外的变量拿到最大值, 代码应该是像这样: 这里的lastOddMax,lastEvenMax就不必和自己比较了

for(...){

        if(num%2){

                lastOddMax=max(lastOddMax+num,lastEvenMax+num-x);

                ans=max(lastOddMax,ans);

        }else{

               lastEvenMax=max(lastEvenMax+num,lastOddMax+num-x);

                ans=max(lastEvenMax,ans);

        }

}

重头戏来了:

做题顺序:
1. first        读一下题目,有一个大致的印象,是哪一个类别的(字符串,图,树),该类别一般都有什么算法

2. second  看一看数据量,O(n) O(nlogn) ... O(n^2) O(n^3)

3. third       如果感觉做过类似的题目, 那就往上面靠, 仿写  
                  没有类似的题目,想一想一些通用的思想,  dp, 贪心, sort, 递归/dfs, 二分法
    3.1 使用dp 就要想好定义, 最好能写出来i,j的含义, 同时也可以看看分类(a) [:i][:j]
                   (b)dp[i]表示选择nums[i]最优     (c) num[i]另起炉灶

    3.2 贪心  不用严格证明正确性,能够贪心一下简化一点思维就很好了,常见的可以是 sort + 贪心,                       反悔贪心: 针对于需要等待积累 让量变引起质变的题目,  循环外记录ans

    3.3 sort 可以看成是一种数据预处理or一种代价不大的贪心,  要求题目的选择是 非连续且不要求                     相对位置,针对多目标最值或者多元素结构体,可以先固定一维最好或者最差,减少思维量

    3.4 dfs/递归  对于树/图的一种普适法, 尤其对树有奇效,可以大大简化思维量,类似归纳法,只需要                     边界条件(即n=0,n=1), 递推式,(f(n)=g(f(n-1)...f(1))) 使用记忆化后可以降低时间复杂度

    3.5 二分法 针对于暴力超时,但是nlogn能过, 使用二分有个条件,就是ans左右两边一定是左边全0                     右边全1或者左边全1右边全0,ans是第一个0或者第一个1

4. 优化时空 使用特殊的数据结构

        unordered_map / map 用时间换空间                   -> multimap / val取vector

        unordered_set  / set    插入删除logn,       会去重 -> multiset(不去重)

        单调栈 单调队列

做题原则:

        1. 不管方法好坏或者时空复杂度, 第一步要做的是解出来这个题, 只有先做出来,然后再去想时空的优化,在掌握了常见算法之后, 大部分优化都是数据结构的调整, 也有一些是思路的调整,这个就说明你的第一步定位没有定位好, 也是我们要通过刷题学习积累的feel.

        2. 对于新的算法,特殊的数据结构,这个没有做出来是正常的,也不必花费时间死想,正确的姿势应该是-> 搞懂这个题, 搞懂这个模板, 刷五六道类似题目, 过一段时间回顾, 之后就自然掌握了,下一次他就应该进入你的知识库了

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

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

相关文章

JVM 垃圾回收器

一、垃圾回收器类型 如果说垃圾收集算法是内存回收的方法论&#xff0c;那么垃圾收集器就是内存回收的具体 实现。下图展示了7种作用于不同分代的收集器&#xff0c;其中用于回收新生代的收集器 包括Serial、PraNew、Parallel Scavenge&#xff0c;回收老年代的收集器包括Seri…

采煤vr事故灾害应急模拟救援训练降低生命财产损失

在化工工地&#xff0c;设备繁多、环境复杂&#xff0c;潜藏着众多安全隐患&#xff0c;稍有不慎便可能引发安全事故。为了保障工地的安全&#xff0c;我们急需一套全面、高效的安全管理解决方案。web3d开发公司深圳华锐视点研发的工地安全3D模拟仿真隐患排查系统&#xff0c;正…

sql优化之利用聚簇索引减少回表次数:limit 100000,10

1. 问题描述 产品&#xff1a;我要对订单列表页做一个分页功能&#xff0c;每页10条数据&#xff0c;商家可以根据金额过滤订单 技术&#xff1a;好的&#xff0c;我写一个sql实现分页&#xff0c;x表示偏移页数&#xff0c;自测limit 10,10耗时200ms&#xff1a; SELECT * …

【2024最新精简版】MyBatis面试篇

文章目录 mybatis内部实现过程mybatis延迟加载请说说MyBatis的工作原理mybatis接口里的方法,参数不同时能重载吗mybatis分页插件的原理是什么&#xff1f;mybatis的一级、二级缓存&#x1f44d;mybatis如何实现多表查询mybatis如何实现批量插入&#x1f44d;mybatis动态SQL标签…

Spring Boot 自定义Starter

自定义starter 创建pom项目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

可视化剪辑,账号矩阵管理,视频分发,聚合私信多功能一体化营销工具 源代码开发部署方案

可视化剪辑&#xff0c;账号矩阵管理&#xff0c;视频分发&#xff0c;聚合私信多功能一体化营销工具 源代码开发部署方案 可视化剪辑&#xff1a; 可视化剪辑开发是一种通过图形化界面和拖放操作&#xff0c;以可视化的方式进行影片剪辑和编辑的开发方法。它可以让非专业用户…

【NLP练习】Transformer中的位置编码

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、什么是位置编码 1. 位置编码定义 Transformer 模型中的位置编码是为了在处理序列数据时引入位置信息&#xff0c;以便模型能够分辨输入序列中不同位置的词…

180.二叉树:二叉搜索树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

实时交通 | 城市交通态势采集及可视化操作(定时运行)

一、前言 交通态势数据是关于交通状况的一种量化描述&#xff0c;它提供了关于道路网络运行状态的详细信息。交通态势数据指的是根据车流入量和车流出量的定义&#xff0c;衡量整个全局交通区域交通态势的数据。这些数据通常从车辆GPS轨迹数据中提取&#xff0c;包括车辆行驶速…

Oracle备份失败处理,看这一篇就够了!

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

时代巨兽!深度神经网络如何改变我们的世界?

深度神经网络 1、 简介1.1 定义深度神经网络1.2 深度学习的发展历程1.3 深度神经网络的应用领域 2、深度神经网络的基本原理2.1 神经元层2.1.1 神经元2.1.2 神经元层 2.2 前向传播2.3 反向传播2.4 激活函数2.4.1、作用2.4.2、常见激活函数2.4.3、选择激活函数的考虑 2.5 损失函…

Selenium+Pytest自动化测试框架能碰撞出什么样的火花

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象&#xff0c;封装继承 一定的selenium基础——本篇不讲selenium&#xff0c;不会的可以自己去看selenium中文翻译网 一、测试框架简介 测试框架有什么优点呢&#xff1a; 代码复用率高…

网信办部署开展清朗专项行动,严打色情等违法信息外链

据网信中国官方公众号&#xff0c;近日&#xff0c;中央网信办专门印发通知&#xff0c;在全国范围内部署开展为期2个月的“清朗打击违法信息外链”专项行动。 据介绍&#xff0c;本次专项行动聚焦违法信息外链问题易发多发的8个重点环节开展整治。 一是账号环节。在账号头像…

零基础直接上手java跨平台桌面程序,使用javafx(五)TableView显示excel表

我们在窗口的中间加上TableVie&#xff1a; 在hello-view.fxml的文本中&#xff0c;要增加一些代码。在TableView定义中加上fx:id"TableView1"&#xff0c;这样java代码才方便访问&#xff0c;在java代码中要加上FXML private TableView TableView1;表示定义TableVie…

【ArcGISProSDK】OpenItemDialog打开文件对话框

打开单个文件 效果 代码 public async void OpenFunction() {// 获取默认数据库var gdbPath Project.Current.DefaultGeodatabasePath;OpenItemDialog openItemDialog new OpenItemDialog() { Title "打开要素文件",InitialLocation gdbPath,Filter ItemFilte…

vue 使用 ztree 超大量数据,前端树形结构展示

ztree 是一个很经典的基于jquey开发的树结构编辑展示UI组件库。 创建一个文件 ztree.vue&#xff0c;代码如下&#xff1a; <template><div><div class"ztree vue-giant-tree" :id"ztreeId"></div><div class"treeBox&q…

MySQL基础——函数和约束

目录 1函数 1.1字符串函数 1.2数值函数 1.3日期函数 1.4流程函数 2约束 2.1约束概述和演示 2.2外键约束&#xff08;表连接键&#xff09; 1函数 函数是指一段可以直接被另一段程序调用的程序或代码。 1.1字符串函数 MySQL中内置了很多字符串函数&#xff0c;常用的…

vue之一键部署的shell脚本和它的点.bat文件、海螺AI、ChatGPT

MENU 前言vite.config.ts的配置deploy文件夹的其他内容remote.shpwd.txtdeploy.bat 前言 1、在src同级新建deploy.bat文件&#xff1b; 2、在src同级新建deploy文件夹&#xff0c;文件夹中新建pwd.txt和remote.sh文件&#xff1b; 3、配置好后&#xff0c;直接双击deploy.bat文…

【计算机视觉】人脸算法之图像处理基础知识(五)

图像的几何变换 3.图像的旋转 图像的旋转就是让图像按照某一点旋转到指定的角度。需要确定3个参数&#xff1a;图像的旋转中心、旋转角度和缩放因子。在openv中通过getRotationMatrix2D()函数来实现图像的旋转。 import cv2 import numpy as npimgpath "images/img1.j…

Jacob环境探索(兼容性、管理员、DLL位置、VS环境,COM权限)

概述&#xff1a; 最近在生产开发实践出现了很多问题&#xff0c;经过了一系列排查&#xff0c;特做如下总结 探索成果&#xff1a; 1. jacob.dll的建议位置 首先jacob的官网&#xff0c;以及官方GitHub&#xff0c;你可以从这里找到DLL文件&#xff0c;以及相关资料然后DLL文…