【算法刷题】Day22

news2025/2/5 22:06:50

文章目录

  • 1. 按摩师
    • 题干:
    • 算法原理:(dp)
      • 1. 状态表示:
      • 2. 状态转移方程
      • 3. 初始化
      • 4. 填表顺序
      • 5. 返回值
    • 代码:
  • 2. 寻找数组的中心下标
    • 题干:
    • 算法原理:(前缀和)
    • 代码:
  • 3. 除自身以外数组的乘积
    • 题干:
    • 算法原理:(前缀和)
    • 代码:

1. 按摩师

在这里插入图片描述
原题链接


题干:

按摩师每次预约服务之间要休息
不能接受相邻的预约
给一个请求序列,摘到最优的预约集合,返回总分钟数

算法原理:(dp)

1. 状态表示:

dp[i] 表示:选择到 i 位置的时候,此时的最长预约时长
在这里插入图片描述
继续细化:
f[i] 表示:选择到 i 位置时, nums[i] 必选,此时的最⻓预约时长
g[i] 表示:选择到 i 位置时, nums[i] 不选,此时的最长预约时长

2. 状态转移方程

在这里插入图片描述

f[i] :
如果 nums[i] 必选,那么我们仅需知道 i - 1 位置在不选的情况下的最⻓预约时长
然后加上 nums[i] 即可
因此 f[i] = g[i - 1] + nums[i]

g[i] :
如果 nums[i] 不选,那么 i - 1 位置上选或者不选都可以
因此,我们需要知道 i- 1 位置上选或者不选两种情况下的最长时长
因此 g[i] = max(f[i - 1], g[i- 1])

在这里插入图片描述

3. 初始化

f[0] = nums[0]
g[0] = 0

4. 填表顺序

从左往右,两个表⼀起填

5. 返回值

max(f[n - 1], g[n - 1])


代码:

class Solution {
    public int massage(int[] nums) {
        int n = nums.length;
        if(n == 0) {
            return 0;
        }
        int[] f = new int[n];
        int[] g = new int[n];
        f[0] = nums[0];

        for(int i = 1; i < n; i++) {
            f[i] = g[i-1] + nums[i];
            g[i] = Math.max(g[i-1],f[i-1]);
        }
        return Math.max(f[n - 1],g[n - 1]);
    }
}

在这里插入图片描述


2. 寻找数组的中心下标

在这里插入图片描述
原题链接


题干:

中心下标:左侧元素和 = 右侧元素和
如果这个值在最左 或者 最右 和为0
有多个下标,返回最左边
不存在这个值,返回 -1
在这里插入图片描述


算法原理:(前缀和)

在这里插入图片描述
(1)预处理前缀和
f:前缀和数组
f[i] 表示:[0,i-1] 区间,所有元素的和
f[i] = f[i-1] + nums[i-1]

g:后缀和数组
g[i] 表示:[i+1,n-1] 区间,所有元素的和
g[i] = g[i+1] + nums[i+1]

(2)使用前缀和
在 0~n - 1 枚举下标 i
判断 f[i] = g[i]

(3)细节问题
f(0),g(0) 可能越界访问,需要初始化
f(0) = 0
g(n-1) = 0

(4)填表顺序
f:从左往右
g:从右往左


代码:

class Solution {
    public int pivotIndex(int[] nums) {
        int n = nums.length;
        int[] f = new int[n];
        int[] g = new int[n];

        for(int i = 1; i < n; i++) {
            f[i] = f[i - 1] + nums[i - 1];
        }
        for(int i = n - 2; i >= 0; i--) {
            g[i] = g[i + 1] + nums[i + 1];
        }

        for(int i = 0; i < n; i++) {
            if(f[i] == g[i]) {
                return i;
            }
        }
        return -1;
    }
}

在这里插入图片描述

3. 除自身以外数组的乘积

在这里插入图片描述
原题链接


题干:

nswer[i]等于nums中 nums[i] 之外其余各元素的乘积
前缀元素和后缀的乘积都在 32位 整数范围


算法原理:(前缀和)

在这里插入图片描述

(1)预处理前缀积
f:前缀积数组
f[i] 表示:[0,i-1] 区间,所有元素的乘积
f[i] = f[i-1] * nums[i-1]

g:后缀积数组
g[i] 表示:[i+1,n-1] 区间,所有元素的乘积
g[i] = g[i+1] * nums[i+1]

(2)使用前缀和
在这里插入图片描述
ret[i[i] = f[i] * g[i]

(3)细节问题
f(0) = 1
g(n-1) = 1

(4)填表顺序
f:从左往右
g:从右往左


代码:

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int[] f = new int[n];
        int[] g = new int[n];

        f[0] = g[n-1] = 1;
        for(int i = 1; i < n; i++) {
            f[i] = f[i-1] * nums[i-1];
        }
        for(int i = n - 2 ; i >= 0; i--) {
            g[i] = g[i+1] * nums[i+1];
        }
        int[] ret = new int[n];
        for(int i = 0; i < n; i++) {
            ret[i] = f[i] * g[i];
        }
        return ret;
    }
}

在这里插入图片描述

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

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

相关文章

【hcie-cloud】【11】华为云Stack资源与服务扩建【云服务扩容、自动化变更平台公共服务组件、华为云Stack典型高阶服务扩容简介、缩略词】【下】

文章目录 扩容工程简介、扩容管理规模、计算资源扩容与减容云服务扩容云服务扩容简介华为云Stack云服务扩容背景华为云Stack可选基础云服务华为云Stack可选网络服务华为云Stack可选高阶服务华为云Stack云服务扩容流程 自动化变更平台&公共服务组件背景介绍自动化变更平台&a…

ESPCN训练报错解决

ESPCN训练报错解决 超分重建ESPCN训练自己的数据集时会出现报错,主要为制作数据集时的错误,本文将给出报错的解决方法和错误说明。 目录 ESPCN训练报错解决错误一一、错误说明二、解决方法三、错误说明错误二一、错误说明二、解决方法错误一 一、错误说明 在使用自己的数据…

flowable流程部署后act_re_procdef表无对应模型得数据

情况1&#xff1a; 修改前&#xff1a; public static final String XML ".xml"; repositoryService.createDeployment().key(model.getKey()).name(model.getName()).addBytes(model.getName() XML, bpmnXML).deploy();修改后&#xff1a; public static final …

Java_集合进阶Map集合

一、Map集合 1.1 Map概述体系 各位同学&#xff0c;前面我们已经把单列集合学习完了&#xff0c;接下来我们要学习的是双列集合。首先我们还是先认识一下什么是双列集合。 所谓双列集合&#xff0c;就是说集合中的元素是一对一对的。Map集合中的每一个元素是以keyvalue的形式…

Tomcat转SpringBoot、tomcat升级到springboot、springmvc改造springboot

Tomcat转SpringBoot、tomcat升级到springboot、springmvc改造springboot 起因&#xff1a;我接手tomcat-springmvc-hibernate项目&#xff0c;使用tomcat时问题不大。自从信创开始&#xff0c;部分市场使用国产中间件&#xff0c;例如第一次听说的宝兰德、东方通&#xff0c;还…

众和策略:美股全线上涨 中概股大涨

当地时间12月21日&#xff0c;欧洲股市全线下跌&#xff0c;英国富时100指数、法国CAC40指数、德国DAX指数均小幅下跌。美国通胀降温&#xff0c;美股商场三大指数尾盘飙升&#xff0c;纳斯达克指数、标普500指数均涨逾1%&#xff0c;大型科技股多数上涨&#xff0c;特斯拉涨近…

Jenkins自动化构建打包,部署

1.环境准备 上传jdk&#xff0c;maven和tomcat的包&#xff0c;解压到/usr/local下并配置环境变量。 配置jdk [rootserver04 ~]# vim /etc/profile.d/java.sh JAVA_HOME/usr/local/java export PATH$JAVA_HOME/bin:$PATH##加载环境变量 [rootserver04 ~]# source /etc/profi…

Mybatis之增删改查

一、引言 书接上回&#xff0c;我们在了解完mybatis之后&#xff0c;肯定要知道怎么使用&#xff0c;本文就来详细讲解Mybatis的增删改查事务&#xff0c;还不了解怎么配置mybatis的童鞋可以去这篇文章了解一下通俗易懂讲解javaweb之mybatis-CSDN博客 二、Mybatis——增 举例…

Android笔记(二十):JetPack DataStore 之 Proto DataStore

Jetpack DataStore 是一种数据存储解决方案&#xff0c;主要适用于小型数据的处理。它可以通过协议缓冲区存储键值对或类型化对象。DataStore 使用 Kotlin 协程和 Flow 以异步、一致的事务方式存储数据。DataStore有两种实现方式&#xff08;1&#xff09;Preferences DataStor…

基于ssm房屋租赁平台的设计与开发论文

摘 要 目前对于在外的人员来说租赁房屋是最基本的问题。对于房屋的租赁可以选择直接找房东、找专业的房屋租赁公司和自己在网上找房屋。自己找房东的问题在于需要时间&#xff0c;而且对于需要提前租赁房屋的需要多次跑到小区&#xff0c;找中介租赁房屋的问题在于费用问题&am…

消除蛋蛋派

欢迎来到程序小院 消除蛋蛋派 玩法&#xff1a;消除游戏&#xff0c;三个相同形状的蛋蛋连成一条直线即可消除&#xff0c;点击鼠标左键移动球球进行消除&#xff0c; 可以使用道具&#xff0c;共有50关卡&#xff0c;快去闯关吧^^。开始游戏https://www.ormcc.com/play/gameS…

Python爬取电影天堂

前言&#xff1a; 本文非常浅显易懂&#xff0c;可以说是零基础也可快速掌握。如有疑问&#xff0c;欢迎留言&#xff0c;笔者会第一时间回复。 一、爬虫的重要性&#xff1a; 如果把互联网比喻成一个蜘蛛网&#xff0c;那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛通过网页的…

FFmpeg windows安装与使用

FFmpeg下载&#xff1a; 1、进入ffmpeg官网&#xff0c;点击“Download”。官网地址&#xff1a;FFmpeg 2、选择对应环境的编译工具&#xff0c;如下载windows环境下的ffmpeg编译工具 3、点击下载编译好的ffmpeg工具 FFmpeg使用&#xff1a; 1、将ffmpeg编译的bin文件复制出来…

如何用Excel制作一张能在网上浏览的动态数据报表

前言 如今各类BI产品大行其道&#xff0c;“数据可视化”成为一个热门词汇。相比价格高昂的各种BI软件&#xff0c;用Excel来制作动态报表就更加经济便捷。今天小编就将为大家介绍一下如何使用葡萄城公司的纯前端表格控件——SpreadJS来实现一个Excel动态报表&#xff1a; 实…

uniapp 添加分包页面,配置分包预下载

为什么要分包 ? 分包即将小程序代码分成多个部分打包&#xff0c;可以减少小程序的加载时间&#xff0c;提升用户体验 添加分包页面 比较便捷的方法是使用vscode插件 uni-create-view 新建分包文件夹 以在我的页面&#xff0c;添加分包的设置页面为例&#xff0c;新建文件夹 s…

五、Microsoft群集服务(MSCS)环境的搭建

一、【目的】 学会利用Windows Server布置群集环境。 二、【设备】 FreeNAS11.2&#xff0c;Windows Server 2019 三、【要求】 学会利用Windows Server布置群集环境&#xff0c;掌握处理问题的能力。 配置表&#xff1a; 节点公网IP(public)内网IP(private)群集IP(clust…

RocketMQ系统性学习-RocketMQ高级特性之文件恢复与 CheckPoint 机制

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

理解AI思维链:AI领域的核心概念及其意义

理解AI思维链&#xff1a;AI领域的核心概念及其意义 引言AI思维链的定义AI思维链的重要性实际应用案例分析面临的挑战与未来展望结语 引言 在这个日益由数据驱动的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为科技领域的一颗耀眼的明星&#xff0c;其影响力遍…

TG5032CGN TCXO / VC-TCXO(超高稳定10pin端子型)

TG5032CGN 晶振是EPSON推出的一款额定频率10MHz至40MHz的石英晶体振荡器&#xff0c;该型号采用互补金属氧化物半导体技术&#xff0c;输出波形稳定可靠。外形尺寸为5.0 3.2 1.45mm具有小尺寸,高稳定性。该款晶体振荡器&#xff0c;可以在G&#xff1a;-40C至 85C的温度内稳定…

达梦到达梦的外部链接dblink(DM-DM DBLINK)

一. 使用场景&#xff1a; 部链接对象&#xff08;LINK&#xff09;是 DM 中的一种特殊的数据库实体对象&#xff0c;它记录了远程数据库的连接和路径信息&#xff0c;用于建立与远程数据的联系。通过多台数据库主库间的相互通讯&#xff0c;用户可以透明地操作远程数据库的数…