【每日一题】收集巧克力

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:枚举操作数
  • 写在最后

Tag

【枚举】【数组】【2023-12-28】


题目来源

2735. 收集巧克力


题目解读

有长度为 n, 下标从 0 开始的整数数组 nums, 表示收集不同类型的巧克力的成本. nums[i] 表示收集类型 i 巧克力的成本.

在进行 k 次操作后(每次操作的成本为 x), 初始类型为 i 的巧克力需要 nums[(i + k) mod n] 的成本来收集. 我们也可以不进行任何操作,直接收集巧克力.

最后返回收集所有 n 种类型的巧克力的最小成本.


解题思路

方法一:枚举操作数

思路

对于初始类型为 i 的巧克力,如果我们一共进行了 k 次操作,那么相当于我们可以用:

n u m s [ i ] , n u m s [ ( i + 1 ) m o d n ] , . . . , n u m s [ ( i + k ) m o d n ] nums[i], nums[(i + 1) mod n], ..., nums[(i+k) mod n] nums[i],nums[(i+1)modn],...,nums[(i+k)modn]
中的任意成本去收集该类型的巧克力. 为了使成本最小, 我们一定要选择上述 k+1 个成本中的最小值进行收购. 当操作的次数为 n 时, 类型 i 的巧克力成本又会回到 nums[i], 因此操作次数不会超过 n-1.

于是,我们可以枚举所有的操作次数, 范围为 [0, n-1]. 当操作次数为 k 时,初始类型为 i 的巧克力成本可以这样表示:

{ f ( i , 0 ) = n u m s [ i ] f ( i , k ) = min ⁡ { f ( i , k − 1 ) , n u m s [ ( i + k ) m o d n ] } \left\{ \begin{array}{l} f\left( i,\ 0 \right) =nums\left[ i \right]\\ f\left( i,\ k \right) =\min \left\{ f\left( i,\ k-1 \right) ,\ nums\left[ \left( i+k \right) \ mod\ n \right] \right\}\\ \end{array} \right. {f(i, 0)=nums[i]f(i, k)=min{f(i, k1), nums[(i+k) mod n]}

此时, 操作次数为 k 时的最小成本为:

k ⋅ x + ∑ i = 0 n − 1 f ( i , k ) k\cdot x+\sum_{i=0}^{n-1}{f\left( i,k \right)} kx+i=0n1f(i,k)

最终答案即为所有 k ∈ [ 0 , n − 1 ] k∈[0,n−1] k[0,n1] 时上式的最小值。

算法

class Solution {
public:long long minCost(vector<int>& nums, int x) {int n = nums.size();vector<int> f(nums);long long res = accumulate(f.begin(), f.end(), 0LL);for (int k = 1; k < n; ++k) {for (int i = 0; i < n; ++i) {f[i] = min(f[i], nums[(i+k) % n]);}res = min(res, static_cast<long long>(k) * x + accumulate(f.begin(), f.end(), 0LL));}return res;}
};

复杂度分析

时间复杂度: O ( n 2 ) O(n^2) O(n2)

空间复杂度: O ( n ) O(n) O(n)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。

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

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

相关文章

12.28_黑马数据结构与算法笔记Java

目录 291 最长公共子序列 动态规划 分析 292 最长公共子序列 动态规划 实现 293 Leetcode 583 两个字符串删除 294 Leetcode 300 最长递增子序列 分析 295 Leetcode 300 最长递增子序列 实现 296 Catalan数 分析 297 Catalan数 实现 298 Catalan数 应用 出栈总数 299 C…

【C++】vector 基本使用(详解)

目录 一&#xff0c;vector 的介绍 二&#xff0c;vector 的定义 1&#xff0c;vector() 2&#xff0c;vector&#xff08;size_type n, const value_type& val value_type()&#xff09; 3&#xff0c;vector (const vector& x) 4&#xff0c;vector (InputIte…

PAT乙级 1025 反转链表

给定一个常数 K 以及一个单链表 L&#xff0c;请编写程序将 L 中每 K 个结点反转。例如&#xff1a;给定 L 为 1→2→3→4→5→6&#xff0c;K 为 3&#xff0c;则输出应该为 3→2→1→6→5→4&#xff1b;如果 K 为 4&#xff0c;则输出应该为 4→3→2→1→5→6&#xff0c;即…

【Redis前奏曲】初识Redis

文章目录 一.Redis的一些特性(优点)1. 在内存中存储数据2. 可编程的3. 可扩展的4.持久化5. 聚集(集群)6. 高可用Redis快的原因 二. 使用案例1.数据库2. 缓存3. 消息队列 一.Redis的一些特性(优点) 我们在上一篇博客中说到,Redis是一个在内存中存储数据的中间件.用作数据库,数据…

本地部署Python Flask并搭建web问答应用程序框架实现远程访问

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架&#xff0c;让我们可以使用Python语言快速实现一个网站或Web服务&#xff0c;本期教程…

比起 Pandas, 你更需要 Polars:详细指南

在数据分析领域&#xff0c;Python 由于其多功能性和广泛的库生态系统而成为一种流行的语言。数据处理和分析在提取见解和做出明智决策方面发挥着至关重要的作用。然而&#xff0c;随着数据集的规模和复杂性不断增长&#xff0c;对高性能解决方案的需求变得至关重要。 有效地处…

【Docker】添加指定用户到指定用户组

运行Docker ps命令&#xff0c;报错&#xff1a;/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied 创建docker用户组 安装docker时默认已经创建好 sudo groupadd docker添加用户加入docker用户组 此处以用户user为例 sudo usermo…

cf918div4的E题讲解

虽然是div4&#xff0c;但是打的稀烂&#xff0c;哭死。 E题看了jiangly的题解豁然开朗&#xff0c;原来思路这么简单。被自己蠢到了&#xff0c;我傻傻的用前缀和&#xff0c;两层for枚举区间&#xff0c;不出意外TLE了&#xff0c;写的那一刻就知道要超时&#xff0c;但是没…

微信小程序全部内嵌H5遇到的问题记录

微信小程序内嵌H5遇到的问题 问题1&#xff1a;js-sdk的配置h5里面微信公众平台 问题2&#xff1a;业务域名的配置小程序开发微信公众平台 问题3&#xff1a;H5与小程序的消息传递。方案1H5 方案2H5页面小程序开发 方案3H5页面小程序页面 使用H5来开发APP&#xff0c;之后将该H…

TG7050CKN,TG7050SKN ,TG7050CMN,TG7050SMN

爱普生推出的温补晶振型号&#xff1a;TG7050CKN&#xff0c;TG7050SKN &#xff0c;TG7050CMN&#xff0c;TG7050SMN频率范围为 10mhz ~ 54mhz 适用于广泛的频率需求。这几款的特点就是耐高温&#xff0c;温度可达105℃高温&#xff0c;而且都是高稳定性温补晶振&#xff0c;&…

Springboot单元测试mock踩坑

mock bean方式 //mock bean方式一MockBeanpublic UserMapper userMapper;//mock bean方式二Beanpublic LogMapper logMapper() {return Mockito.mock(LogMapper.class);} 如何注册mapstruct bean //扫描mapstruct包路径ComponentScan("xxx.xxx.mapstruct")public cl…

ERP与智能商品系统在供应链管理上有哪些区别和优势?

ERP系统和智能商品系统在供应链管理方面有以下区别和优势&#xff1a; 范围和综合性&#xff1a;ERP系统涵盖了企业的整个供应链管理过程&#xff0c;包括供应商管理、采购管理、库存管理、生产计划和物流管理等。它可以实现供应链上下游的信息共享和协同&#xff0c;提高供应…

计算机网络复习2

物理层 文章目录 物理层通讯基础奈奎斯特定理香农定理编码与调制交换传输介质&#xff08;了解&#xff09;物理层设备 通讯基础 数据信号码元信源信道信宿单工通道&#xff1a;只有一个方向半双工通道&#xff1a;不能同时发送和接收全双工通道 奈奎斯特定理 规定&#xff…

下载完redis每次启动项目必须打开redis服务,否则不能运行,解决方法

redis-server.exe --service-install redis.windows.conf 在redis的目录启动终端运行此命令可以下载redis服务&#xff0c;然后在服务里面启动redis服务&#xff0c;之后就可以不用打开小黑框再启动了 redis下载地址&#xff1a; Redis下载安装教程_redis 3.2下载-CSDN博客

【C++核心编程(一)】

一、内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域&#xff1a; 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的。 全局区&#xff1a;存放全局变量和静态变量以及常量。 栈区&#xff1a;由编译器自动分配释放,存放函数的…

《Vue2.X 进阶知识点》- 防 ElementUI Divider 分割线

前言 使用 el-divider 背景为白色是没问题的。 但当背景换成其它颜色&#xff0c;问题就出现了&#xff01;&#xff01; 仔细看原来是两层&#xff0c;默认背景色是白色。 想着把背景色改为透明应该能用&#xff0c;结果发现背面是一条实线&#xff0c;难怪要用白色遮挡…不符…

ChatGPT4.0(中文版)国内无限制免费版(附网址)

ChatGPT&#xff0c;由OpenAI开发的人工智能语言模型。它是你的数字对话伙伴&#xff0c;无论你有何问题或需要什么帮助&#xff0c;它都能提供有用的信息。 经过不断的研发和更新&#xff0c;ChatGPT的性能和功能得到了显著提升。现在&#xff0c;我们将重点介绍ChatGPT的两个…

TVS 管选型与 ESD 防护设计

文章目录 ESD 防护设计 TVS管的基础特性 TVS管的选型方法 TVS管布局细节 参考文献 ESD 防护设计 静电防护设计是让电路板外接的各类金属按钮开关在接触到外界空气放电或接触放电时&#xff0c;在这种瞬间出现的大能量注入到电路板后&#xff0c;能够通过某种设计好的通道泄…

VSCode + vite + vue3断点调试配置

没想到这个配置我搞了一上午&#xff0c;网上很多的配置方案都没有效果。总算搞定了&#xff0c;特此记录一下。 首先需要在.vscode文件夹下面创建launch.json配置文件。然后输入如下配置&#xff1a; {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。//…

「Verilog学习笔记」状态机与时钟分频

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 状态机写法 timescale 1ns/1nsmodule huawei7(input wire clk ,input wire rst ,output reg clk_out );//*************code***********//parameter S0 0, S1 1 , S2…