3730. Maximum Calories Burnt from Jumps 🔒
题目描述
You are given an integer array heights of size n, where heights[i] represents the height of the ith block in an exercise routine.
You start on the ground (height 0) and must jump onto each block exactly once in any order.
- The calories burned for a jump from a block of height
ato a block of heightbis(a - b)2. - The calories burned for the first jump from the ground to the chosen first block
heights[i]is(0 - heights[i])2.
Return the maximum total calories you can burn by selecting an optimal jumping sequence.
Note: Once you jump onto the first block, you cannot return to the ground.
Example 1:
Input: heights = [1,7,9]
Output: 181
Explanation:
The optimal sequence is [9, 1, 7].
- Initial jump from the ground to
heights[2] = 9:(0 - 9)2 = 81. - Next jump to
heights[0] = 1:(9 - 1)2 = 64. - Final jump to
heights[1] = 7:(1 - 7)2 = 36.
Total calories burned = 81 + 64 + 36 = 181.
Example 2:
Input: heights = [5,2,4]
Output: 38
Explanation:
The optimal sequence is [5, 2, 4].
- Initial jump from the ground to
heights[0] = 5:(0 - 5)2 = 25. - Next jump to
heights[1] = 2:(5 - 2)2 = 9. - Final jump to
heights[2] = 4:(2 - 4)2 = 4.
Total calories burned = 25 + 9 + 4 = 38.
Example 3:
Input: heights = [3,3]
Output: 9
Explanation:
The optimal sequence is [3, 3].
- Initial jump from the ground to
heights[0] = 3:(0 - 3)2 = 9. - Next jump to
heights[1] = 3:(3 - 3)2 = 0.
Total calories burned = 9 + 0 = 9.
Constraints:
1 <= n == heights.length <= 1051 <= heights[i] <= 105
解法
方法一:贪心 + 排序
根据题意,跳跃的顺序会影响总消耗的卡路里数。为了最大化卡路里消耗,我们可以采用贪心策略,优先跳跃高度差较大的块。
因此,我们可以先将块的高度进行排序,然后从最高的块开始跳跃,然后跳到最低的块,依此类推,直到所有块都被跳跃过。
具体步骤如下:
- 对数组 \(\text{heights}\) 进行排序。
- 初始化变量 \(\text{pre} = 0\),表示上一个块的高度,变量 \(\text{ans} = 0\),表示总消耗的卡路里数。
- 使用双指针,左指针 \(\text{l}\) 指向数组的开头,右指针 \(\text{r}\) 指向数组的结尾。
- 当 \(\text{l} < \text{r}\) 时,执行以下操作:
- 计算从上一个块跳到右指针指向的块的卡路里消耗,并将其加入 \(\text{ans}\)。
- 计算从右指针指向的块跳到左指针指向的块的卡路里消耗,并将其加入 \(\text{ans}\)。
- 更新 \(\text{pre}\) 为左指针指向的块的高度。
- 将左指针向右移动一位,右指针向左移动一位。
- 最后,计算从上一个块跳到中间块的卡路里消耗,并将其加入 \(\text{ans}\)。
时间复杂度 \(O(n \times \log n)\),空间复杂度 \(O(\log n)\)。其中 \(n\) 是数组的长度。
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |