求数组排序后相邻数的最大差值

给定一个未排序数组如果数组排序之后,相邻最大差值 给定一个未排序数组如果数组排序之后,相邻最大差值。要时间复杂度为O(n),且要不能用非基于比较的排序。 首先,这个问题明显限制了不能使用直接排序的方式解。因为基于比较的排序时间复杂度最低也是O(nlogn),而且题目限制不能使用非基于比较的排序。所以我们需要另想思路。 我们可以看到上面的解题思路,首先我们遍历一次数组,得到数组中的max和min。把(max-min)切分为N... 阅读详情

/**
* 求数组排序后相邻数的最大差值
* @author Administrator
* {9,3,1,10} 返回6
*/
public class test12 {
public static void main(String[] args) {
int[] arr = {9,3,1,10};
System.out.println(maxGap(arr));
}

public static int maxGap(int[] arr){
    if(arr==null||arr.length==0){
        return 0;
    }
    int len = arr.length;
    int max = Integer.MIN_VALUE;
    int min = Integer.MAX_VALUE;
    for(int i=0;i<len;i++){
        max = Math.max(arr[i], max);
        min = Math.min(arr[i], min);
    }
    if(max==min){
        return 0;
    }
    int[] maxArr = new int[len+1];
    int[] minArr = new int[len+1];
    boolean[] hasNum = new boolean[len+1];
    int k = 0;
    for(int i=0;i<len;i++){
        k = getBucket(arr[i], max, min, len);
        maxArr[k] = hasNum[k] ? Math.max(arr[i], maxArr[k]) : arr[i];
        minArr[k] = hasNum[k] ? Math.min(arr[i], minArr[k]) : arr[i];
        hasNum[k] = true;
    }
    int lastMax = 0;
    int nextMin = 0;
    int i = 0;
    for(; i<len; i++){
            if(!hasNum[i]){
                lastMax = maxArr[i-1];
                break;
            }
    }
    while(i<len+1){
        if(hasNum[i]){
            nextMin = minArr[i];
            break;
        }
        i++;
    }
    return nextMin-lastMax;
}
/**
 * 计算进入哪个桶  max直接放入n+1桶中 
 */
public static int getBucket(int num, int max, int min, int len){
    return ((num-min)*len)/(max-min);
}

}

Maximum Gap 寻找数组排序相邻两个最大差值,桶排序,O(n) Given an unsorted array, find the maximum difference between the successive elements in its sorted form. Try to solve it in linear time/space. Return 0 if the array contains less than 2 elements 阅读详情

相关推荐

用 dism 合并与删除 wim 映像

一、合并 假设 installA.wim 有 3 个映像,installB.wim 有 1 个映像。 1、全部合并 将 installA.wim 中的 3 个卷映像合并到 installB.wim 中,这样 installB.wim 中的卷映像增加到 4 个。 dism/export-image/sourceimagefile:d:\installA.wim/sourceindex:1/destinationimagefile:d:\installB.wim dism/export-image/source

KefanWon的博客 5136

Leetcode bucket分组桶排序

排序排序是初始化一定量的桶arr[n]={0} 对于i 填入arr[i]即可(arr[i]++) 那么最后遍历arr即可,适用于范围较小的排序,复杂度为O(N) 题目描述 给定一个整形数组arr,返回排序相邻最大差值 arr = [9, 3, 1, 10]。如果排序,结果为[1, 3, 9, 10],9和3的最大差值,故返回6。 arr = [5, 5, 5, 5]。返回0。 [要] 时间复杂度为O(n),空间复杂度为O(n) 思路 本题排序相邻两个最大差值,对于n个

一只老风铃 581

基于Unity引擎利用OpenCV和MediaPipe的面部表情和人体运动捕捉系统

增加了模型的绑定,利用Mediapipe这个强大的库可以实现识别面部表情的捕捉和人体结构运动的捕捉,基于以上的特性加入到Unity的人物模型中,实现实时的面部表情和人体运行的捕捉

BIgbossyii的博客 1万+

【中等】数组排序之后相邻最大差值-Java

package live.every.day.ProgrammingDesign.CodingInterviewGuide.ArrayAndMatrix; /** * 数组排序之后相邻最大差值 * * 【题目】 * 给定一个整型数组arr,返回排序后的相邻最大差值。 * * 【举例】 * arr=[9,3,1,10],如果排序,结果为[1,3,9,10],9和3的最大差值,故返回6。 * arr=[5,5,5,5],返回0。 * * 【要】 * 如果arr的长度为N,

了解➔熟悉➔掌握➔精通 722

数组排序之后相邻最大差值

描述 给定一个整形数组arr,返回排序相邻最大差值 arr = [9, 3, 1, 10]。如果排序,结果为[1, 3, 9, 10],9和3的最大差值,故返回6。 arr = [5, 5, 5, 5]。返回0。 [要] 时间复杂度为O(n),空间复杂度为O(n) 解题思路: 如果直接对数组进行sort排序在遍历查找其时间复杂度达到O(nlogn); 桶排序 1)可将整个数组分为N个区间,假设arr数组最大值为Max,最小值为Min,则各子区间大小为(Max-Min)/N 2)遍历整个arr

fire_guang的博客 1553

数组与矩阵---数组排序之后相邻最大差值

【题目】   给定一个整型数组arr,返回排序后的相邻最大差值   例如:   arr = [9, 3, 1, 10]。如果排序,结果为[1, 3, 9, 10],9和3的最大值,故返回6.   arr = [5, 5, 5, 5]。返回0.   要时间复杂度O(N). 【基本思路】   利用桶排序的思想(不是直接进行桶排序),可以做到时间复杂度O(N),空间复杂度O(N...

冰殇的博客 1275

程序员代码面试指南刷题--第八章.数组排序之后相邻最大差值

题目描述 给定一个整形数组arr,返回排序相邻最大差值 arr = [9, 3, 1, 10]。如果排序,结果为[1, 3, 9, 10],9和3的最大差值,故返回6。 arr = [5, 5, 5, 5]。返回0。 [要] 时间复杂度为O(n),空间复杂度为O(n) 输入描述: 第一行一个整N。表示数组长度。 接下来N个整表示数组内的元素 输出描述: 输出一个整表示答案 示例1 输入 4 9 3 1 10 输出 6 解法一:桶排序 import java.io.*; impor

我不是什么好人 885

对一个数组排序之后相邻最大差值

题目: 给定一个整形数组arr,返回排序后的相邻最大差值。 时间复杂度为O(N)。 解答: 如果用排序法实现,其时间复杂度为O(NlogN),而如果利用桶排序的思想(不是桶排序),可以做到O(N),额外空间复杂度为O(N)。遍历arr找到最大值max和最小值min。如果arr的长度为N,准备N+1个桶,把max单独放在第N+1个桶中,[min,max)范围上的放在1N号桶里,对于1N号桶中...

dream_follower的博客 2226

无序数组排序相邻最大差值(思路及详解)

前两天在一个学长面试的时候遇到这样一个题,这里稍微详细说下本文的标题。给你n个任意整排序相邻两个之间的最大差值,这里n可能有10^5,整为任意32位整型。要解算法的时间复杂度为O(n)。    O(n)的时间复杂度,再加上任意32位整型,意味着我们没法用桶排序、计排序等O(n)的排序算法(还记得这些算法吗!),当我看到这题的时候,我优先就排除了排序,也排除的桶排序,从此在错误的

xindoo 8686

[据结构][Python][经典题目]无序数组排序后的最大相邻

题目: 有一个无序整型数组,如何数组排序后的任意两个相邻元素的最大差值? 解决方案: 1.循环数组,找到最小值和最大值。 2.若有N个,就创建N+1个桶来装,分别为 0号桶,1号桶,2号桶…N号桶 。 3.定义三个大小为N+1的数组。 4.循环原数组, 确定每个被装入哪个桶。如何确定?–>which = (num-min)*N/(max-min),每个桶内只能存放进入该桶的最大...

Twiss的博客 936

排序(4)

案例4 荷兰国旗问题。只包含0,1,2的整数组进行排序,要使用交换、原地排序,而不是利用计进行排序。 分析:本题主要过程与快排划分过程类似。时间复杂度O(N),空间复杂度O(1)。 如图,一次检查,为0,就和首位交换,然后0区吃一个;为2,就和末位交换,然后2区吃一个。检查到二区域位置,整个过程结束。案例5 在行列都排行序的矩阵中找 0 1 2 5 2 3 4 7 4

st_hunter的博客 306

【双机位A卷】华为OD笔试之【固定滑窗/前缀和】双机位A-计算最接近的【Py/Java/C++/C/JS/Go六种语言OD独家双机位A卷真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)

weixin_48157259的博客 1113

LeetCode 164. 最大间距 C++代码——Leetcode刷题笔记+思路分享

LeetCode 164. 最大间距 给定一个无序的数组,找出数组排序之后,相邻元素之间最大差值。 如果数组元素个小于 2,则返回 0。 示例 1: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。 示例 2: 输入: [10] 输出: 0 解释: 数组元素个小于 2,因此返回 0。 说明: 你可以假设数组中所有元素都是非负整,且值在 32 位有符号整范围内。 请尝试在线性时间复杂度和

weixin_42989041的博客 523

排序数组中的最大差值

请设计一个复杂度为O(n)的算法,计算一个未排序数组排序相邻元素的最大差值。 给定一个整数组A和数组的大小n,请返回最大差值。保证数组元素个大于等于2小于等于500。 测试样例: [9,3,1,10],4 返回:6 由于除了桶排序外任何排序时间复杂最度低也是O(N*log2)所以我们考虑使用桶排序的思想

一个吃水不忘挖井人的博客。希望能帮助到你 1039

排序之后相邻最大差值

我发表的文章不多,经验可能不够,大家有什么建议或者问题欢迎来评论,大家互相学习,共同进步。问题及分析1.给定一个整型数组arr,返回排序后的相邻最大差值数组的长度为N,要时间复杂度为O(N);排序算法则时间为O(NlogN),利用堆排序的思想,不是堆排序;首先对数组遍历找到最大值和最小值,分别记为max和min,我们用N+1个桶来处理输据(后面讲为什么是N+1个桶),max元素存放在第N

发如雪的博客 1847

2021-05-20:给定一个数组arr, 返回如果排序之后,相邻最大差值。要:时间复杂度O(N) 。

2021-05-20:给定一个数组arr, 返回如果排序之后,相邻最大差值。要:时间复杂度O(N) 。 福大大 答案2021-05-20: 假设答案法。N个,根据最大值和最小值的范围等分成N+1个桶。每个桶只需要存当前桶的最大值和最小值。根据鸽笼原理,必然存在空桶。最后只需要遍历【右桶min-左桶max】,返回最大值。最终答案可能来自相邻桶(这个很难想到),也可能来自跨桶(空桶的左侧和右侧就是跨桶),但是一定不会来自同一个桶内部的情况。另外,这道题是以空间复杂度换取时间复杂度 代码用golang

福大大架构师每日一题 2万+

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

1.题目 给定一个数组如果排序之后,相邻最大差值,要时间复杂度O(N),且要不能用非基于比较的排序。 2.实现 2.1 思路 问题: * 给定一个数组如果排序之后,相邻最大差值,要时间复杂度O(N),且要不能用非基于比较的 排序。 * 比如 数组[1,2,9,4,6] sort后 [1,2,4,6,9] 6-9之间间隙最大值就为3. * 思路: * 我们可以基于桶排序的思想来解决这个问题。data[1,2,3,4,5,7,

芝兰生于深谷,不以无人而不芳 1119

LeetCode 每日一题164. 最大间距

164. 最大间距 给定一个无序的数组,找出数组排序之后,相邻元素之间最大差值。 如果数组元素个小于 2,则返回 0。 示例 1: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。 示例 2: 输入: [10] 输出: 0 解释: 数组元素个小于 2,因此返回 0。 说明: 你可以假设数组中所有元素都是非负整,且值在 32 位有符号整范围内。 请尝试在线性时间复杂度和空间复杂度的条件下

雷震子的博客 549

ENVI基于改进的 CASA 模型反演 NPP计算软件

植被净初级生产力 (Net Primary Productivity, NPP) ,朱博士开发的用于进行npp计算的神器

上一篇: 判断是否是顺子
下一篇: 汉诺塔
nev1Mor
博客等级 码龄12年 13粉丝 79原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值