0
点赞
收藏
分享

微信扫一扫

LeetCode1822. Sign of the Product of an Array

一、题目

1、题目描述

2、接口描述

class Solution {
public:
    long long minCost(vector<int>& nums, int x) {
        
    }
};

3、原题链接

2735. 收集巧克力


二、解题报告

1、思路分析

题目的人话翻译每种巧克力有一个收回的成本,存于数组对应下标元素,就是你可以花费x令整个数组循环右移一个长度,这样原来第i种巧克力的成本就变成了i + 1种巧克力的成本,让你返回所有巧克力的最小成本和。

显然对于一个长度为n的数组最多移动n - 1次,我们开一个数组mi维护每种巧克力的最小成本,每移动一次都对最小成本进行维护,然后计算此时的实际成本即mi的元素和加上移动次数*x

2、复杂度

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;
    }
};
举报

相关推荐

0 条评论