【教3妹学编程-算法题】将数组分成最小总代价的子数组 I_数组

2哥 : 叮铃铃,3妹,过年干嘛呢,是不是逛吃逛吃,有没有长胖呢。 3妹:切,我妈张罗着要给我相亲呢。 2哥 : 相亲?哈哈哈哈 3妹:别笑了,我妈说跟我年龄相等的人都已经孩子上小学了,跟她年龄相等的人孙子最少都会打酱油了。 2哥 :哈哈哈哈,让我先笑一会儿 3妹:话说2哥过年在家里也刷题吗? 2哥:当然了,雷打不动。 3妹:好吧,还得是2哥🐂,我有几天懈怠了。 2哥:好吧,说到刷题啊,今天有一道“最小”的题目, 让我们先做一下吧~

【教3妹学编程-算法题】将数组分成最小总代价的子数组 I_子数组_02

题目:

给你一个长度为 n 的整数数组 nums 。

一个数组的 代价 是它的 第一个 元素。比方说,[1,2,3] 的代价是 1 ,[3,4,1] 的代价是 3 。

你需要将 nums 分成 3 个 连续且没有交集 的子数组。

请你返回这些子数组的 最小 代价 总和 。

示例 1:

输入:nums = [1,2,3,12] 输出:6 解释:最佳分割成 3 个子数组的方案是:[1] ,[2] 和 [3,12] ,总代价为 1 + 2 + 3 = 6 。 其他得到 3 个子数组的方案是:

  • [1] ,[2,3] 和 [12] ,总代价是 1 + 2 + 12 = 15 。
  • [1,2] ,[3] 和 [12] ,总代价是 1 + 3 + 12 = 16 。 示例 2:

输入:nums = [5,4,3] 输出:12 解释:最佳分割成 3 个子数组的方案是:[5] ,[4] 和 [3] ,总代价为 5 + 4 + 3 = 12 。 12 是所有分割方案里的最小总代价。 示例 3:

输入:nums = [10,3,1,1] 输出:12 解释:最佳分割成 3 个子数组的方案是:[10,3] ,[1] 和 [1] ,总代价为 10 + 1 + 1 = 12 。 12 是所有分割方案里的最小总代价。

提示:

3 <= n <= 50 1 <= nums[i] <= 50

思路:

【教3妹学编程-算法题】将数组分成最小总代价的子数组 I_java代码_03

维护最小值和第二小值

java代码:

class Solution {
    public int minimumCost(int[] nums) {
        int fi = Integer.MAX_VALUE, se = Integer.MAX_VALUE;
        for (int i = 1; i < nums.length; i++) {
            int x = nums[i];
            if (x < fi) {
                se = fi;
                fi = x;
            } else if (x < se) {
                se = x;
            }
        }
        return nums[0] + fi + se;
    }
}