1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-25 17:50:26 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/problem (Chinese)/将数组分成最小总代价的子数组 II [divide-an-array-into-subarrays-with-minimum-cost-ii].html

50 lines
3.1 KiB
HTML
Raw Normal View History

2024-01-26 11:46:13 +08:00
<p>给你一个下标从 <strong>0</strong>&nbsp;开始长度为 <code>n</code>&nbsp;的整数数组&nbsp;<code>nums</code>&nbsp;和两个 <strong></strong>&nbsp;整数&nbsp;<code>k</code>&nbsp;<code>dist</code>&nbsp;</p>
<p>一个数组的 <strong>代价</strong>&nbsp;是数组中的 <strong>第一个</strong>&nbsp;元素。比方说,<code>[1,2,3]</code>&nbsp;的代价为&nbsp;<code>1</code>&nbsp;<code>[3,4,1]</code>&nbsp;的代价为&nbsp;<code>3</code>&nbsp;</p>
<p>你需要将 <code>nums</code>&nbsp;分割成 <code>k</code>&nbsp;<strong>连续且互不相交</strong>&nbsp;的子数组,满足 <strong>第二</strong>&nbsp;个子数组与第 <code>k</code>&nbsp;个子数组中第一个元素的下标距离 <strong>不超过</strong>&nbsp;<code>dist</code>&nbsp;。换句话说,如果你将&nbsp;<code>nums</code>&nbsp;分割成子数组&nbsp;<code>nums[0..(i<sub>1</sub> - 1)], nums[i<sub>1</sub>..(i<sub>2</sub> - 1)], ..., nums[i<sub>k-1</sub>..(n - 1)]</code>&nbsp;,那么它需要满足&nbsp;<code>i<sub>k-1</sub> - i<sub>1</sub> &lt;= dist</code>&nbsp;</p>
<p>请你返回这些子数组的 <strong>最小</strong>&nbsp;总代价。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [1,3,2,6,4,2], k = 3, dist = 3
<b>输出:</b>5
<b>解释:</b>将数组分割成 3 个子数组的最优方案是:[1,3] [2,6,4] 和 [2] 。这是一个合法分割,因为 i<sub>k-1</sub> - i<sub>1</sub> 等于 5 - 2 = 3 ,等于 dist 。总代价为 nums[0] + nums[2] + nums[5] ,也就是 1 + 2 + 2 = 5 。
5 是分割成 3 个子数组的最小总代价。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [10,1,2,2,2,1], k = 4, dist = 3
<b>输出:</b>15
<b>解释:</b>将数组分割成 4 个子数组的最优方案是:[10] [1] [2] 和 [2,2,1] 。这是一个合法分割,因为 i<sub>k-1</sub> - i<sub>1</sub> 等于 3 - 1 = 2 ,小于 dist 。总代价为 nums[0] + nums[1] + nums[2] + nums[3] ,也就是 10 + 1 + 2 + 2 = 15 。
分割 [10] [1] [2,2,2] 和 [1] 不是一个合法分割,因为 i<sub>k-1</sub> 和 i<sub>1</sub> 的差为 5 - 1 = 4 ,大于 dist 。
15 是分割成 4 个子数组的最小总代价。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>nums = [10,8,18,9], k = 3, dist = 1
<b>输出:</b>36
<b>解释:</b>将数组分割成 4 个子数组的最优方案是:[10] [8] 和 [18,9] 。这是一个合法分割,因为 i<sub>k-1</sub> - i<sub>1</sub> 等于 2 - 1 = 1 ,等于 dist 。总代价为 nums[0] + nums[1] + nums[2] ,也就是 10 + 8 + 18 = 36 。
分割 [10] [8,18] 和 [9] 不是一个合法分割,因为 i<sub>k-1</sub> 和 i<sub>1</sub> 的差为 3 - 1 = 2 ,大于 dist 。
36 是分割成 3 个子数组的最小总代价。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
<li><code>3 &lt;= k &lt;= n</code></li>
<li><code>k - 2 &lt;= dist &lt;= n - 2</code></li>
</ul>