leetcode_3010 将数组分成最小总代价的子数组 I

1. 题意

将一个数组分成三个子数组,

并且让每个子数组的代价为其首元素,

问最小的代价是多少?

2. 分析

第一个元素肯定会被计入代价之中去,

而在剩下的元素之中,我们可以任意的

选取位置作为子数组的开头,也就是子数组的代价。

因此这个题目变成了求:

首元素和剩下数组的最小值和次小值。

2.1 排序

时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

空间复杂度 O ( 1 ) O(1) O(1)

cpp 复制代码
class Solution {
public:
    int minimumCost(vector<int>& nums) {
        sort(nums.begin() + 1, nums.end());

        return nums[0] + nums[1] + nums[2];
    }
};
2.2 维护最小值次小值

时间复杂度 O ( n ) O(n) O(n)

空间复杂度 O ( 1 ) O(1) O(1)

cpp 复制代码
class Solution {
public:
    int minimumCost(vector<int>& nums) {
        
        int f2 = nums[1];
        int f3 = nums[2];

        if ( f2 > f3)
            swap( f2, f3);

        int N = nums.size();
        for ( int i = 3; i < N; ++i) {
            
            if ( nums[i] < f2) {
                f3 = f2;
                f2 = nums[i];
            }
            else if ( nums[i] < f3) {
                f3 = nums[i];   
            }

        }

        return nums[0] + f2 + f3;
    }
};

参考

0x3f

相关推荐
通信小呆呆6 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
benben0446 小时前
强化学习之DQN算法族(基于gymnasium开发)
算法
何以解忧,唯有..8 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
想吃火锅10058 小时前
【leetcode】88.合并两个有序数组js
算法
生成论实验室9 小时前
机器人:一个自主运动的系统
人工智能·算法·语言模型·机器人·自动驾驶·agi·安全架构
Qres8219 小时前
算法复键——树状数组
数据结构·算法
H178535090969 小时前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks
dayuOK63079 小时前
写作卡壳怎么办?我的“5分钟启动法”
人工智能·职场和发展·自动化·新媒体运营·媒体
不会就选b9 小时前
算法日常・每日刷题--<二分查找>3
算法