美文网首页
【算法题】2294. 划分数组使最大差为 K

【算法题】2294. 划分数组使最大差为 K

作者: 程序员小2 | 来源:发表于2023-03-16 08:09 被阅读0次

题目:

给你一个整数数组 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++;//累计区间数量+1
                min = nums[i];//当前值为新区间的开始
            }
        }
        return cnt;
    }
}

相关文章

  • 根据给定的值划分数组

    算法描述 给定一个数组和一个数k,划分数组,似的左边的值都小于k,右边的数大于等于k,返回划分数组的位置,例:[3...

  • 三路快排算法-求中位数问题(4)

    算法面试高频题,求前K个数,或者求中位数 三路快排算法思路 将数组分为三部分,随机选择数组中的一个数,使数组左边都...

  • LeetCode #1296 Divide Array in S

    1296 Divide Array in Sets of K Consecutive Numbers 划分数组为连...

  • 头条面经

    提前批算法题 给定数组nums=[1,2,3,2,3,2,3],和一个常数K,找到数组里面出现次数>(N/k)次的...

  • Codeforces 1363A - Odd Selection

    日常一道算法题。 翻译 有一个长度为 n 的数组,想要正好挑选出 x 个元素,使他们的和 为 奇数。 输入格式 输...

  • 周常3 算法题5道、react ssr 补充

    周常 算法题 java 实现1.调整数组顺序使奇数位于偶数前面2.链表中倒数第k个结点3.翻转链表4.合并两个排序...

  • Java实现每日一道算法面试题(16):leecode 560

    1.算法题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 说...

  • 2018暑假集训Problem Archive #1K题题解和感

    K题 题目大意 题目链接给你一个大小为n的数组a,和数字k,求数组a中大小大于等于k的子数组的最大平均值 分析 先...

  • 聚类算法应用——K-means

    聚类:K-means算法 k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似...

  • 计数排序

    计数排序(Counting Sort) O(n+k) k为申请数组大小 介绍 算法描述 根据待排序数据的大小,估算...

网友评论

      本文标题:【算法题】2294. 划分数组使最大差为 K

      本文链接:https://www.haomeiwen.com/subject/kybrrdtx.html