【算法刷题】Day22

文章目录

  • 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.mzph.cn/news/237890.shtml

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

相关文章

vue 简单实现购物车:商品基础信息最终的 html 文件 + 商品计数器的组件处理,实现了购物车;

购物车实现过程&#xff1a; Ⅰ、商品购物车作业需求&#xff1a;1、商品购物车页面示例&#xff1a;2、具体需求&#xff1a; Ⅱ、html 文件的构建&#xff1a;商品购物车.html Ⅲ、组件文件的构建&#xff1a;商品购物车1.js Ⅳ、小结&#xff1a; Ⅰ、商品购物车作业需求&am…

百度侯震宇详解:大模型将如何重构云计算?

12月20日&#xff0c;在2023百度云智大会智算大会上&#xff0c;百度集团副总裁侯震宇以“大模型重构云计算”为主题发表演讲。他强调&#xff0c;AI原生时代&#xff0c;面向大模型的基础设施体系需要全面重构&#xff0c;为构建繁荣的AI原生生态筑牢底座。 侯震宇表示&…

Go语言与HTTP/2协议的实践探索

随着互联网技术的发展&#xff0c;HTTP/2协议逐渐成为主流。Go语言作为一种高效、简洁的编程语言&#xff0c;与HTTP/2协议的结合具有很大的潜力。本文将探讨Go语言与HTTP/2协议的实践探索。 一、HTTP/2协议的优势 HTTP/2协议相比HTTP/1.1协议&#xff0c;具有以下优势&#…

浅谈ASO优化如何应对市场竞争的挑战

随着应用市场的竞争越来越激烈&#xff0c;ASO优化也要为了应对各种来临的风险与机遇做出改变&#xff0c;提高自己的适应能力&#xff0c;下面小柚整理了一些思路供大家参考。 1. 深入了解目标用户需求&#xff1a;首先&#xff0c;需要深入了解目标用户的需求和痛点&#xf…

Qt 6.3 学习笔记

文章目录 Qt的安装和配置创建一个Qt项目信号和槽布局和控件绘图和动画数据库和网络 Qt是一个跨平台的C图形用户界面应用程序开发框架。它提供了创建GUI应用程序的工具和库。Qt 6.3是Qt的最新版本&#xff0c;引入了许多新特性和改进。在这个章节中&#xff0c;我们将详细介绍如…

单片机原理及应用:Keil μVision4和Proteus 8的配置介绍

笔者所在的专业最近开设了单片机课程&#xff0c;对笔者而言&#xff0c;虽然之前有一定的代码基础。但还是第一次面对既要求代码架构又要求电路仿真的领域。为了巩固知识和增强记忆&#xff0c;特此创建了这个专栏&#xff0c;谨以一名非电专业初学者的身份记录和分享知识。 …

B/S医院手术麻醉临床管理系统源码 手术申请、手术安排

手术麻醉系统概述 手术室是医院各个科室工作交叉汇集的一个重要中心&#xff0c;在时间、空间、设备、药物、材料、人员调配的科学管理、高效运作、安全质控、绩效考核&#xff0c;都十分重要。手术麻醉管理系统&#xff08;Operation Anesthesia Management System&#xff0…

Python异常捕获和处理方式

目录 一、引言 二、异常捕获和处理的基本方式 1、try-except语句块 2、raise语句 3、assert语句 三、高级异常捕获和处理技术 1、多个except块 2、finally块 3、使用多个try-except块 4、使用with语句 5、使用多个except块捕获同一种异常 四、总结 一、引言 在Pyt…

优化Go语言HTTP应用程序性能的技巧

Go语言具有强大的性能和高效的网络编程能力&#xff0c;因此在构建高性能的HTTP应用程序时&#xff0c;使用Go语言是一个不错的选择。以下是一些优化Go语言HTTP应用程序性能的技巧&#xff1a; 使用goroutine和channel Go语言的goroutine和channel是实现并发编程的重要特性。…

将qt程序注册成服务

将qt程序注册成服务 1、qt服务模块管理下载 qt-solutions 2、QtService项目 2.1、将qtservice拷贝到项目代码路径 2.2、实现服务管理 PS&#xff1a;响应服务的启停 CustomService.h #include <QCoreApplication> #include "qtservice.h"class CustomSer…

HarmonyOS 应用事件打点开发指导

简介 传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志&#xff0c;难以识别其中的关键信息。因此&#xff0c;应用开发者需要一种数据打点机制&#xff0c;用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息。 HiAppEvent 是在系统层面…

Kafka集群架构原理(待完善)

kafka在zookeeper数据结构 controller选举 客户端同时往zookeeper写入, 第一个写入成功(临时节点), 成为leader, 当leader挂掉, 临时节点被移除, 监听机制监听下线,重新竞争leader, 客户端也能监听最新leader leader partition自平衡 leader不均匀时, 造成某个节点压力过大, …

SpringCloudGateway网关处拦截并修改请求

SpringCloudGateway网关处拦截并修改请求 需求背景 老系统没有引入Token的概念&#xff0c;之前的租户Id拼接在请求上&#xff0c;有的是以Get&#xff0c;Param传参形式&#xff1b;有的是以Post&#xff0c;Body传参的。需要在网关层拦截请求并进行请求修改后转发到对应服务。…

工业自动化的通信核心—钡铼技术R10A工业级路由器介绍

随着工业自动化的快速发展&#xff0c;工业通信技术也日新月异。在这个信息时代&#xff0c;工业通信设备的稳定性、可靠性和高效性变得尤为重要。作为工业自动化的核心部件之一&#xff0c;钡铼技术R10A工业级路由器以其出色的性能和卓越的功能在行业内赢得了广泛的赞誉。本文…

docker学习(十二、Redis主从容错迁移)

文章目录 一、容错切换迁移挂一个master节点6381&#xff0c;查看集群信息主节点挂一个&#xff0c;对应从节点切换为主节点&#xff0c;数据获取测试恢复挂的主节点&#xff0c;主从关系变化 二、小思考 docker搭建Redis集群相关知识&#xff1a; docker学习&#xff08;九、分…

C# SQLite基础工具类

目录 1、安装System.Data.SQLite工具包 2、创建数据库 3、数据库的连接与断开 4、执行一条SQL语句 5、批量执行sql语句 6、返回首行首列值 7、执行sql语句返回datatable 1、安装System.Data.SQLite工具包 2、创建数据库 /// <summary> /// 数据库路径 …

Github2023-12-22开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-22统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目4TypeScript项目2非开发语言项目2C项目1C项目1HTML项目1Dart项目1 Tailwind CSS&#xff1a;快速U…

kibana-7.15.2 一分钟下载、安装、部署 linux

文章目录 一、下载安装部署 1. 下载2. 解压3. 修改配置 二、kibana 启动 2.1. 创建kibana 用户2.2. 赋予权限2.3. 切换用户2.4. kibana启动2.5. 监控服务2.6. 监控服务2.7. kibana停止2.8. 效果图 三、kibana 启动2 3.1. 浏览器访问3.2. 效果图 一、下载安装部署 https:…

HTML美化网页

使用CSS3美化的原因 用css美化页面文本,使页面漂亮、美观、吸引用户 可以更好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 具有良好的用户体验 <span>标签 作用 能让某几个文字或者某个词语凸显出来 有效的传递页面信息用css美化页面文本&#xff0c;使页面漂…

面试题:JVM 对锁都进行了哪些优化?

文章目录 锁优化自旋锁和自适应自旋锁消除锁粗化逃逸分析方法逃逸线程逃逸通过逃逸分析&#xff0c;编译器对代码的优化 锁优化 jvm 在加锁的过程中&#xff0c;会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 自旋锁和自适应自旋 现在大多的处理器都是…