开发者社区 问答 正文

遇到一个最优分组的问题,求解答。

给出一个长度为 n的数组和一个数字k你需要在数组中选出一些数字,这些数字两两之间的差值不能超过 k。你需要判断最多能够挑出的数字个数。(n 在 [1,100000] 之间,k 和数组中的数字在 [1,1000000000] 之间)输入数组长度 n;选出的两数字最大差值 k;和一个长度为 n 的数组。输出最多能够选出的数字个数。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 16:53:31 441 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 当面对一组数字时,他们中最大的值和最小的值的差值如果不超过k,那么其中任何两个数字的差值,都一定不超过k。而有序数组,恰恰可以帮我们快速找到任何一组数字中的最大的值和最小的值,我们可以用一对指针,用右指针指向的值,与左指针指向的值做差,从而一次性判断左右指针之间的值组成的一组数,是否满足上面的条件。当右指针与左指针的差值超过 k 时,我们可以尝试移动左指针,重新满足上面的条件。当右指针与左指针的差值不超过 k 时,我们可以尝试移动右指针,寻找所求值的最大值。试着应用上面的思想,最佳方案应该可以达到:最坏情况下两个指针各遍历一次数组, 因此输入:5 5 [13,4,6,9,20] 输出:3

    2021-12-23 18:45:14 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等