给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。

import java.util.Arrays;public class MaximumDifferenceBetweenAdjacentNumbers{public static int maxGap(int[] nums){if (nums == null || nums.length < 2) {return 0;}int len = nums.length;int min = Integer.MAX_VALUE;int max = Integer.MIN_VALUE;for (int i = 0; i < len; i++){min = Math.min(min, nums[i]);max = Math.max(max, nums[i]);}if (min == max){return 0;}int bid = 0;int[] maxs = new int[len + 1];int[] mins = new int[len + 1];boolean[] hasNum = new boolean[len + 1];for (int i = 0; i < len; i++) {bid = bucket(nums[i], len, min, max);mins[bid] = hasNum[bid] ? Math.min(mins[bid], nums[i]) : nums[i];maxs[bid] = hasNum[bid] ? Math.max(maxs[bid], nums[i]) : nums[i];hasNum[bid] = true;}int res = 0;int lastMax = maxs[0];for (int i = 1; i < len + 1; i++) {if (hasNum[i]){res = Math.max(res, mins[i] - lastMax);lastMax = maxs[i];}}return res;}public static int bucket(long num, long len, long min, long max) {return (int)((num - min) * len / (max - min));}public static int comparator(int[] nums) {if(nums == null || nums.length < 2) {return 0;}Arrays.sort(nums);int res = Integer.MIN_VALUE;for (int i = 1; i < nums.length; i++) {res = Math.max(res, nums[i] - nums[i - 1]);}return res;}public static int[] generateRandomArray(int maxSize, int maxValue) {int[] arr = new int[(int) ((maxSize+1) * Math.random())];for (int i = 0; i < arr.length; i++) {arr[i] = (int)((maxValue+1) * Math.random()) - (int) (maxValue) * Math.random();}return arr;}public static int[] copyArray(int[] arr) {if (arr == null) {return null;}int[] res = new int[arr.length];for (int i = 0; i < arr.length; i++) {res[i] = arr[i];}return res;}public static void main(String[] args) {boolean succeed = true;int testTime = 700000, maxSize = 100, maxValue = 100;for (int i = 0; i < testTime; i++) {int[] arr1 = generateRandomArray(maxSize, maxValue);int[] arr2 = copyArray(arr1);if (maxGap(arr1) != comparator(arr2)) {succeed = false;break;}}System.out.println(succeed ? "Nice!" : "Fucking fucked!");}
}

给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。相关推荐

  1. 如何得出数组里最大_相邻两数的最大差值(超巧妙解法)

    题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且不能用非基于比较的排序 解法: 首先,输入的数组是还没有排好序的,题目要求是不能使用非基于比较的排序而且排序算法的时 ...

  2. 【算法】—— 相邻两数的最大差值

    题目: 思路: 如果数组长度为N,考虑使用N+1个桶,每个桶能放入数的范围固定,将数组中数据依次放入桶中,那么肯定有一个桶是空桶(因为数一共有N个,而桶有N+1个). 最大差值就出现在相邻两个不为空的 ...

  3. 截止目前为止,我遇到的最难的一道算法题:计算相邻两个数的最大差值

    hello,今天给大家带来一道算法题.这道算法题,是我目前为止,见过最难的一道题.那么到底是怎样的一道算法题呢?如下: 题目:给定一个数组, 求如果排序之后, 相邻两数的最大差值. 要求时间复杂度O( ...

  4. C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

    )输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...

  5. 【算法题】求有序数列中相邻数字之间的最大差值

    桶排序的应用问题 桶排序可参考上一篇博客. 问题描述: 一个数列,求这个数列有序后,相邻数字之间最大的差值是多少. 思路 利用桶排序的过程完成求最大差值问题. 已知桶排序过程如下: 1.首先基于数据的 ...

  6. 给定一个数组求里面数字拼在一起组成的最小数字

    问题描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. Code: ...

  7. java数组从小到大_JAVA中给定一个数组,怎么把它里的数从小到大排列输出?

    展开全部 方法copy如2113下:52614102 import java.util.Random; public class Test{ public static void main(Strin ...

  8. 对一个数组排序之后求相邻数的最大差值

    题目: 给定一个整形数组arr,返回排序后的相邻两数的最大差值. 时间复杂度为O(N). 解答: 如果用排序法实现,其时间复杂度为O(NlogN),而如果利用桶排序的思想(不是桶排序),可以做到O(N ...

  9. 数据排序之后相邻数的最大差值

    我发表的文章不多,经验可能不够,大家有什么建议或者问题欢迎来评论,大家互相学习,共同进步. 问题及分析 1.给定一个整型数组arr,返回排序后的相邻两数的最大差值:数组的长度为N,要求时间复杂度为O( ...

最新文章

  1. IT业爆发“新人”争夺战
  2. Docker 使用 supervisord 管理 lumen队列与crontab
  3. 【原】macbook不睡眠的排查与解决
  4. 自动化测试框架 2019_2019年用于自动化的5个最佳Java测试框架
  5. python不用加号实现加法
  6. js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧
  7. Android 使用View绘制文字(DrawText)技术总结
  8. MySQL的show global variables like “%timeout%“;
  9. 2013上半年智能电视市场调研报告分析
  10. dumprep.exe
  11. Vscode 与服务器建立远程连接(ssh)
  12. 520送什么给男朋友最好?送男朋友礼物排行榜
  13. Java尚硅谷基础笔记-day4数组-数组常见算法
  14. python爬虫:新手爬取NASA每日精选图片
  15. 数字孪生在能源、电力系统、电厂行业的应用实例
  16. Qt 5.15 安装步骤
  17. atm机存款场景图_atm机可以存钱吗(自动存款机存钱演示图)
  18. 坐标正反算(含高程),把要素内置化(无需改程序文件,即可更换路线,同时存两条线要素
  19. 制作MacOS启动盘
  20. C语言fmod()函数:对浮点数取模(求余)和%取余运算符的比较

热门文章

  1. [Linux命令]Sed命令参数
  2. yii2 mysql_Yii2 数据库操作汇总
  3. 常用计算机服务,常用计算机端口对应的服务(The commonly used computer port corresponding service).doc...
  4. redisson用阿里云集群版redis的问题_redission 序列化问题追踪
  5. 怎样将两个html页面合并,如何把WORD的两个页面合并在一起?
  6. linux手动生成dump文件权限不足_来玩一玩Linux常见命令~
  7. Java黑皮书课后题第5章:**5.21(金融应用:比较不同利率下的贷款)编写程序,让用户输入输入贷款总额和以年为单位的贷款期限,然后显示利率从5%到8%每次递增1/8的各种利率下,每月支付额和总支付
  8. 计算机队列概念,2020计算机专业考研数据结构知识点:栈、队列和数组
  9. bootstrap_bootstrap中日历范围选择插件daterangepicker的使用
  10. numpy---one