LeetCode 2735. 收集巧克力
2023-12-28 14:40:05
一、题目
1、题目描述
给你一个长度为?
n
?、下标从?0?开始的整数数组?nums
?,表示收集不同巧克力的成本。每个巧克力都对应一个不同的类型,最初,位于下标?i
?的巧克力就对应第?i
?个类型。在一步操作中,你可以用成本?
x
?执行下述行为:
- 同时修改所有巧克力的类型,将巧克力的类型?
ith
?修改为类型?((i + 1) mod n)th
。假设你可以执行任意次操作,请返回收集所有类型巧克力所需的最小成本。
2、接口描述
class Solution {
public:
long long minCost(vector<int>& nums, int x) {
}
};
3、原题链接
二、解题报告
1、思路分析
题目的人话翻译每种巧克力有一个收回的成本,存于数组对应下标元素,就是你可以花费x令整个数组循环右移一个长度,这样原来第i种巧克力的成本就变成了i + 1种巧克力的成本,让你返回所有巧克力的最小成本和。
显然对于一个长度为n的数组最多移动n - 1次,我们开一个数组mi维护每种巧克力的最小成本,每移动一次都对最小成本进行维护,然后计算此时的实际成本即mi的元素和加上移动次数*x
2、复杂度
时间复杂度: O(N^2) 空间复杂度:O(N)
3、代码详解
?
class Solution {
public:
long long minCost(vector<int>& nums, long long x) {
vector<int> mi(nums);
long long ret = accumulate(mi.begin() , mi.end() , 0LL);
for(int i = 1 , n = nums.size() ; i < n ; i ++){
for(int j = 0; j < n ; j++)
mi[(j + i) % n] = min(mi[(j + i) % n] , nums[j]);
ret = min(ret , i * x + accumulate(mi.begin(), mi.end(), 0LL));
}
return ret;
}
};
文章来源:https://blog.csdn.net/EQUINOX1/article/details/135266834
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!