相邻最大差值
来源:互联网 发布:雅思高频词汇 知乎 编辑:程序博客网 时间:2024/04/29 19:49
请设计一个复杂度为O(n)的算法,计算一个未排序数组中排序后相邻元素的最大差值。
给定一个整数数组A和数组的大小n,请返回最大差值。
代码:
/*Designed by WYQ
*分析:
* 这是一个典型的利用桶排序求解问题,因为桶排序不少基于比较的排序可以打破nlogn的下限,
* 可以达到题目要求的复杂度n
* 相邻两个数差值最大 肯定大于平均值 平均值就是桶的长度 9,3,1,10* 计算桶的长度
* length = (max-min)/(n-1)
* count = (max-min)/length+1; count=3 即[1,4)[4,7)[7,10)[10,13)
*
* */
public int findMaxDivision(int[] A, int n) {
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
int count = 0;
int length = 0;
for (int i = 0; i < n; i++) {
min = min>A[i]?A[i]:min;
max = max<A[i]?A[i]:max;
}
if (max==min){
return 0;
}else{
length = (max-min)/(n-1);//计算桶的长度
count = (max-min)/length+1;//计算桶的数目
}
int[] minbucket = new int[count];//存储每个桶的最小值
for (int i = 0; i < count; i++) {
minbucket[i] = Integer.MAX_VALUE;
}
int[] maxbucket = new int[count];//存储每个桶的最大值
for (int i = 0; i < count; i++) {
maxbucket[i] = Integer.MIN_VALUE;
}
boolean[] isempty = new boolean[count];//判断当前桶是否为空
for (int i = 0; i < count; i++) {
isempty[i] = true;
}
for (int i = 0; i <n; i++) {
int j = getIndexBucket(min,max,A[i],length);//计算这个数应该位于那个桶
isempty[j] = false;
maxbucket[j]=A[i]>maxbucket[j]?A[i]:maxbucket[j];
minbucket[j]=A[i]<minbucket[j]?A[i]:minbucket[j];
}
int lastmax = 0;//存储上一个桶的最大值
boolean flag = true;
int res = Integer.MIN_VALUE;//返回的最大差值
for(int i=0;i<count;i++){
if(flag&&!isempty[i]){
lastmax = maxbucket[i];
flag = false;
continue;
}
if (!flag&&!isempty[i]){
res = Math.max(res,minbucket[i]-lastmax);//当前桶的最小值与上一个桶的最大值比较 得到差值最大
lastmax = maxbucket[i];//更换上一个桶的最大值
}
}
return res;
}
/*
* 计算这个数应该放到第几个桶*/
public int getIndexBucket(int min,int max,int x,int length){
return (x-min)/length;
}
题目来源:http://www.nowcoder.com/practice/376ede61d9654bc09dd7d9fa9a4b0bcd?rp=1&ru=/activity/oj&qru=/ta/2016test/question-ranking
- 相邻最大差值
- 相邻最大差值
- 相邻最大差值
- 相邻最大差值
- 相邻最大差值
- c++-相邻最大差值
- 相邻两数最大差值
- 相邻两数最大差值
- 相邻最大差值(桶排序)
- 相邻两数最大差值
- 相邻两数最大差值
- 相邻两数最大差值
- 相邻两数最大差值
- 相邻两数最大差值
- 算法-无序数列最大相邻大小差值
- 牛客网—相邻最大差值(桶排序)
- 无序数组相邻最大差值java实现
- 相邻两数最大差值练习题
- Eclipse中自动生成versionName的一种方法
- 微信公众帐号开发教程第10篇-符号表情的发送(上)
- 64bit Windows Server 2008 R2 SP1 中IIS7.5 和 TOMCAT7 整合笔记
- Servlet的Request.getInputStream()只能读取一次
- 欢迎使用CSDN-markdown编辑器
- 相邻最大差值
- solr-结合tomcat安装
- 最接近的数
- 录音,录视频功能的实现过程
- Android悬浮窗进阶版-下篇(福利篇)
- Unable to add window崩溃分析
- java---String演示
- 最长子序列问题——动态规划算法初解
- Lily:基于Solr、HBase、Zookeeper云计算上的内容仓库