数组排序之后相邻数的最大差值-计算这个数所在的桶

数组排序后相邻数的最大差值,要求时间复杂度O(N),空间复杂度O(N),完整代码贴上有注释。

整体思路是利用桶排序的思路,定义一组N+1个桶,每个桶的范围是由最小值和最大值表示,两个相邻桶的最大值和最小值的差值就是相邻数的最大差。

代码很简单,但是比较难理解的是如何找到这个数所在的桶。

奈何网上找的所有文章并没有对该公式的解释,所以记下对公式的理解:

 (num - min) * len / (max - min);

(算法的整体思路网上都有,主要内容是如何找到数所在的桶分析)
     * 1.这个公式保证了最小数放在数组索引0也就是头部,最大数恰好放在数组的末尾,那么其他所有的数都在这个最小数和最大数之间也就是数组中,
     * 2.所以保证了所有的数都不会越界,位置就在数组上。
     * 3.因为整个公式中唯一变化的就是num,只有num会影响计算出桶所在的位置,当num等于A,B两个数,A>B的时候,A的桶位置一定大于或者等于B的桶位置
     * 所以不用关心一个桶的范围到底有多大,只要保证有序的两个数计算出桶的位置有序就行,这个很巧妙。
     * 数是有序的,而一个桶里只包含了最小和最大,当一个数往桶里放的时候必须满足最大或最小,否则会被过滤
     * 类似于一个桶等于一个有序子串,有序子串的首位和末尾就是最小和最大 

package com.algorithm.question;

public class GongCha2Test {

    public static void main(String[] ar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值