给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。
给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度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),且要求不能用非基于比较的排序。相关推荐
- 如何得出数组里最大_相邻两数的最大差值(超巧妙解法)
题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且不能用非基于比较的排序 解法: 首先,输入的数组是还没有排好序的,题目要求是不能使用非基于比较的排序而且排序算法的时 ...
- 【算法】—— 相邻两数的最大差值
题目: 思路: 如果数组长度为N,考虑使用N+1个桶,每个桶能放入数的范围固定,将数组中数据依次放入桶中,那么肯定有一个桶是空桶(因为数一共有N个,而桶有N+1个). 最大差值就出现在相邻两个不为空的 ...
- 截止目前为止,我遇到的最难的一道算法题:计算相邻两个数的最大差值
hello,今天给大家带来一道算法题.这道算法题,是我目前为止,见过最难的一道题.那么到底是怎样的一道算法题呢?如下: 题目:给定一个数组, 求如果排序之后, 相邻两数的最大差值. 要求时间复杂度O( ...
- C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。
)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...
- 【算法题】求有序数列中相邻数字之间的最大差值
桶排序的应用问题 桶排序可参考上一篇博客. 问题描述: 一个数列,求这个数列有序后,相邻数字之间最大的差值是多少. 思路 利用桶排序的过程完成求最大差值问题. 已知桶排序过程如下: 1.首先基于数据的 ...
- 给定一个数组求里面数字拼在一起组成的最小数字
问题描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. Code: ...
- java数组从小到大_JAVA中给定一个数组,怎么把它里的数从小到大排列输出?
展开全部 方法copy如2113下:52614102 import java.util.Random; public class Test{ public static void main(Strin ...
- 对一个数组排序之后求相邻数的最大差值
题目: 给定一个整形数组arr,返回排序后的相邻两数的最大差值. 时间复杂度为O(N). 解答: 如果用排序法实现,其时间复杂度为O(NlogN),而如果利用桶排序的思想(不是桶排序),可以做到O(N ...
- 数据排序之后相邻数的最大差值
我发表的文章不多,经验可能不够,大家有什么建议或者问题欢迎来评论,大家互相学习,共同进步. 问题及分析 1.给定一个整型数组arr,返回排序后的相邻两数的最大差值:数组的长度为N,要求时间复杂度为O( ...
最新文章
- IT业爆发“新人”争夺战
- Docker 使用 supervisord 管理 lumen队列与crontab
- 【原】macbook不睡眠的排查与解决
- 自动化测试框架 2019_2019年用于自动化的5个最佳Java测试框架
- python不用加号实现加法
- js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧
- Android 使用View绘制文字(DrawText)技术总结
- MySQL的show global variables like “%timeout%“;
- 2013上半年智能电视市场调研报告分析
- dumprep.exe
- Vscode 与服务器建立远程连接(ssh)
- 520送什么给男朋友最好?送男朋友礼物排行榜
- Java尚硅谷基础笔记-day4数组-数组常见算法
- python爬虫:新手爬取NASA每日精选图片
- 数字孪生在能源、电力系统、电厂行业的应用实例
- Qt 5.15 安装步骤
- atm机存款场景图_atm机可以存钱吗(自动存款机存钱演示图)
- 坐标正反算(含高程),把要素内置化(无需改程序文件,即可更换路线,同时存两条线要素
- 制作MacOS启动盘
- C语言fmod()函数:对浮点数取模(求余)和%取余运算符的比较
热门文章
- [Linux命令]Sed命令参数
- yii2 mysql_Yii2 数据库操作汇总
- 常用计算机服务,常用计算机端口对应的服务(The commonly used computer port corresponding service).doc...
- redisson用阿里云集群版redis的问题_redission 序列化问题追踪
- 怎样将两个html页面合并,如何把WORD的两个页面合并在一起?
- linux手动生成dump文件权限不足_来玩一玩Linux常见命令~
- Java黑皮书课后题第5章:**5.21(金融应用:比较不同利率下的贷款)编写程序,让用户输入输入贷款总额和以年为单位的贷款期限,然后显示利率从5%到8%每次递增1/8的各种利率下,每月支付额和总支付
- 计算机队列概念,2020计算机专业考研数据结构知识点:栈、队列和数组
- bootstrap_bootstrap中日历范围选择插件daterangepicker的使用
- numpy---one