【算法题】2294. 划分数组使最大差为 K
创始人
2025-05-29 13:31:17

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~

题目:

给你一个整数数组 nums 和一个整数 k 。你可以将 nums 划分成一个或多个 子序列 ,使 nums 中的每个元素都 恰好 出现在一个子序列中。

在满足每个子序列中最大值和最小值之间的差值最多为 k 的前提下,返回需要划分的 最少 子序列数目。

子序列 本质是一个序列,可以通过删除另一个序列中的某些元素(或者不删除)但不改变剩下元素的顺序得到。

示例 1:

输入:nums = [3,6,1,2,5], k = 2
输出:2
解释:
可以将 nums 划分为两个子序列 [3,1,2] 和 [6,5] 。
第一个子序列中最大值和最小值的差值是 3 - 1 = 2 。
第二个子序列中最大值和最小值的差值是 6 - 5 = 1 。
由于创建了两个子序列,返回 2 。可以证明需要划分的最少子序列数目就是 2 。
示例 2:

输入:nums = [1,2,3], k = 1
输出:2
解释:
可以将 nums 划分为两个子序列 [1,2] 和 [3] 。
第一个子序列中最大值和最小值的差值是 2 - 1 = 1 。
第二个子序列中最大值和最小值的差值是 3 - 3 = 0 。
由于创建了两个子序列,返回 2 。注意,另一种最优解法是将 nums 划分成子序列 [1] 和 [2,3] 。
示例 3:

输入:nums = [2,2,4,5], k = 0
输出:3
解释:
可以将 nums 划分为三个子序列 [2,2]、[4] 和 [5] 。
第一个子序列中最大值和最小值的差值是 2 - 2 = 0 。
第二个子序列中最大值和最小值的差值是 4 - 4 = 0 。
第三个子序列中最大值和最小值的差值是 5 - 5 = 0 。
由于创建了三个子序列,返回 3 。可以证明需要划分的最少子序列数目就是 3 。

提示:

1 <= nums.length <= 10^5
0 <= nums[i] <= 10^5
0 <= k <= 10^5

java代码:

import java.util.Arrays;class Solution {public int partitionArray(int[] nums, int k) {Arrays.sort(nums);int n = nums.length;if (n == 0) return 1;if (n == 1) return 1;int cnt = 1;int min = nums[0];//一个区间的开始(即区间的最小值)for (int i = 1; i < n; i++) {if (nums[i] - min > k) {//如果当前值与最小值的差大于k,则说明当前区间结束,需要新的区间cnt++;//累计区间数量+1min = nums[i];//当前值为新区间的开始}}return cnt;}
}

相关内容

热门资讯

管涛:直面中东风险外溢, 稳住... 要点 随着冲突升级、持续时间延长,风险因素明显偏向更加不利的情景,能源价格大幅上行风险依然较高。这将...
恒生银行:以约2272万港元回... 8月5日消息,恒生银行在港交所发布公告称,当日在香港斥资约2271.7万港元回购20万股,每股回购价...
蚂蚁消金成功发行20亿元金融债... 8月5日消息,重庆蚂蚁消费金融有限公司披露2025年第一期金融债券发行情况:实际发行总额20亿元人民...
福建:加强就业观念教育引导,鼓... 8月5日消息,《中共福建省委 福建省人民政府关于全方位促进高质量充分就业的实施意见》8月5日对外发布...
青岛市发布31条惠企助企新举措... 8月5日消息,青岛市政府办公厅日前印发《2025年青岛市跨境贸易便利化专项行动方案》,围绕强化政策供...