无序数组O(n)时间找到排序后的两个相邻元素使得他们之间的差最大
来源:互联网 发布:阿里旺旺for mac 编辑:程序博客网 时间:2024/05/19 17:09
1、基数排序,然后根据排序后的数组找到相差的最大值。
public int maximumGap(int[] nums) { if (nums == null || nums.length < 2) { return 0; } // m is the maximal number in nums int m = nums[0]; for (int i = 1; i < nums.length; i++) { m = Math.max(m, nums[i]); } int exp = 1; // 1, 10, 100, 1000 ... int R = 10; // 10 digits int[] aux = new int[nums.length]; while (m / exp > 0) { // Go through all digits from LSB to MSB int[] count = new int[R]; for (int i = 0; i < nums.length; i++) { count[(nums[i] / exp) % 10]++; } for (int i = 1; i < count.length; i++) { count[i] += count[i - 1]; } for (int i = nums.length - 1; i >= 0; i--) { aux[--count[(nums[i] / exp) % 10]] = nums[i]; } for (int i = 0; i < nums.length; i++) { nums[i] = aux[i]; } exp *= 10; } int max = 0; for (int i = 1; i < aux.length; i++) { max = Math.max(max, aux[i] - aux[i - 1]); } return max;}
2、将数组分为n块,依次记录每一块的最大值和最小值,(最小值i-最大值i-1)的最大值即为所求(只有最小值i和最大值i-1是连续的)。例如:
index:0,1,2,3
val:2,8,7,9
maxA:2,MAX,8,9
minA:2,MIN,7,9
所以最大值就是7-2=5。
int maximumGap(vector<int>& nums) { const int n = nums.size(); if(n<=1) return 0; //get the max and min int maxE = *max_element(nums.begin(),nums.end()); int minE = *min_element(nums.begin(),nums.end()); double len = double(maxE-minE)/double(n-1); vector<int> maxA(n,INT_MIN); vector<int> minA(n,INT_MAX); // compute every block's min and max value for(int i=0; i<n; i++) { int index = (nums[i]-minE)/len; maxA[index] = max(maxA[index],nums[i]); minA[index] = min(minA[index],nums[i]); } //compute maxGap by minA[i]-maxA[i-1] int gap = 0, prev = maxA[0]; for(int i=1; i<n; i++) { if(minA[i]==INT_MAX) continue; gap = max(gap,minA[i]-prev); prev = maxA[i]; } return gap; }
0 0
- 无序数组O(n)时间找到排序后的两个相邻元素使得他们之间的差最大
- 重新组合两个数组,使得他们的元素差最小
- 数据结构之——找到无序数组中排序后相邻元素差值的最大值
- 数据结构之——找到无序数组中排序后相邻元素差值的最大值
- Maximum Gap 寻找数组中排序后相邻两个数的最大差值,桶排序,O(n)
- 无序数组排序后的最大相邻差值求解
- php 求一个无序数组经过排列后任意两个相邻元素之差的最大值(算法)
- 求Maximim Gap 排序后的两个相邻元素之间的最大差值
- 一个无序实数数组中的相邻两个元素的最大差值
- 求数组排序后相邻两个数的最大差值
- java编程:两个无序数组a和b,交换a,b中的元素,使得[序列a元素的和]与[序列b元素的和]之间的差最小。
- 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。
- 【华为】题目:有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求: 通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。
- 有1,2,…,n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),一次只能交换两个数
- java 无序数组中两个元素相加等于指定的数 o(n)
- 无序数组的相邻最大差值
- 博客说明
- arm指令编译参数详解
- Ubuntu 14.04 下搭建SVN服务器 svn://
- iOS开发学习之 - 高度自适应之计算文字高度
- myeclipse内存不足问题
- 无序数组O(n)时间找到排序后的两个相邻元素使得他们之间的差最大
- Android之UI控件
- dellR720服务器设置光盘引导流程安装cenos7
- 全栈工程师就是一棵歪脖子树
- baseadapter getview 重复刷新 ViewPager -- Fragment 切换卡顿 LazyLoad
- 怎样知道基本数据类型的最大值 以及取值范围
- Codeforces 653B Bear and Compressing
- zabbix小结(七)触发器相关
- 依赖注入和控制反转的概念描述