Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode164. 最大间距

LeetCode164. 最大间距

作者头像
mathor
发布于 2018-08-17 07:54:15
发布于 2018-08-17 07:54:15
1K00
代码可运行
举报
文章被收录于专栏:mathormathor
运行总次数:0
代码可运行
题目链接:Leetcode164

 这道题用到了桶排序的思想,但是跟排序没啥关系,思路是这样的,数组中有n个元素,那么就构建n+1个桶,桶的属性有三个,最大值最小值以及是否为空。桶的下标从0到n,然后遍历一遍数组,将其中最小值放到0号桶的位置,最大值放到n号桶的位置,这样的话1~n-1号桶应该放什么数就很清楚了,然后再遍历一遍数组,将其中的所有元素放至应该放到的桶内,并且维护桶的属性,即每个桶的最大值和最小值以及是否为空  最后遍历一遍桶,用当前桶的最小值减去上一个桶的最大值,找到最大的那个数即是答案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    class Bucket {
        int max,min;
        boolean hasNum;
    }
    public int maximumGap(int[] nums) {
        int len = nums.length;
        Bucket[] bucket = new Bucket[len + 1];
        for(int i = 0;i <= len;i++)
            bucket[i] = new Bucket();
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        for(int i:nums) {
            max = Math.max(max,i);
            min = Math.min(min,i);
        }
        if(max == min) 
            return 0;
        for(int i = 0;i < len;i++) {
            int idx = put(nums[i],max,min,len);
            if(!bucket[idx].hasNum) {
                bucket[idx].max = nums[i];
                bucket[idx].min = nums[i];
                bucket[idx].hasNum = true;
            } else {
                bucket[idx].max = Math.max(bucket[idx].max,nums[i]);
                bucket[idx].min = Math.min(bucket[idx].min,nums[i]);
            }
        }
        int res = 0;
        int lastMax = bucket[0].max;
        int i = 1;
        for(;i <= len;i++) {
            if(bucket[i].hasNum) {
                res = Math.max(res,bucket[i].min - lastMax);
                lastMax = bucket[i].max;
            }
        }
        return res;
    }
    public static int put(long num,long max,long min,long len) {//计算放在几号桶
        return (int)((num - min) * len / (max - min));
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
算法刷题(3):相邻两数的最大差值
给定一个数组,求如果排序之后,相邻两数的最大差值。要求时间复杂度O(N),且要求不能用非基于比较的排序。
xujjj
2019/07/30
2.1K0
算法刷题(3):相邻两数的最大差值
Leetcode No.164 最大间距(桶排序)
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。 如果数组元素个数小于 2,则返回 0。
week
2022/01/06
6350
Leetcode No.164 最大间距(桶排序)
[算法题] 求数组有序后相邻元素之间的最大差值
8大经典排序排序算法中,时间复杂度最低的为桶排序,其时间复杂度为O(n),但是由于数组是long类型的,其中的数可能很大,例如假设数组中只有3个数,100128124、12912312和8231,假如使用桶排序的话需要准备一个长度为100128124的额外数组用于排序(参考桶排序),这样显然太坑了吧。
CoderJed
2019/05/09
1.5K0
[算法题] 求数组有序后相邻元素之间的最大差值
164. 最大间距
桶排序,时间复杂度O(N+C),N=排序对象个数,C=桶的个数。这题中相邻的两个数有两种情况:1)落在同一个桶里 2)小的那个是前一个桶的最大值大的那个是后一个痛的最小值。因为本题中我们桶大小和桶数量都+1了,所以会是2)种情况。
张伦聪zhangluncong
2022/10/26
5790
【算法】相邻最大差值
给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N) 例子: 5,9,8,3,15 那么排序后的数,3,5,8,9,15,因此相邻最大差值为15-9=6
MapleYe
2020/03/28
1.5K0
桶排序思想及FindMaxGap问题
桶排序思想介绍:桶排序介绍 相邻两数最大差值问题 有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。
用户5513909
2023/04/25
2190
桶排序思想及FindMaxGap问题
桶排序、 计数排序、 基数排序 && 排序后邻数最大差值
一.桶排序、 计数排序、 基数排序 非基于比较的排序, 与被排序的样本的实际数据状况很有关系, 所 以实际中并不经常使用 时间复杂度O(N), 额外空间复杂度O(N) 稳定的排序 二.排序后邻数最大差值 给定一个数组, 求如果排序之后, 相邻两数的最大差值, 要求时 间复杂度O(N), 且要求不能用非基于比较的排序。 public static int maxGap(int[] nums) { if (nums == null && nums.length<2){
大学里的混子
2019/02/18
4420
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数的最大差值。要求:时间复杂度O(N) 。
福大大架构师每日一题
2021/05/20
3420
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数
计算数组中相邻数据的最大差值
题目:计算数组中相邻数据的最大差值 要求时间复杂度为 O(N) 算法思想: 利用桶的思想 image.png 算法代码部分 package com.day1.practice; public class MyMaxGap { //找出数组中相邻两个数的最大差值,要求时间复杂度为(N) public static int maxGap(int[] nums) { if (nums == null || nums.length < 2) { retu
名字是乱打的
2022/05/13
1.3K0
计算数组中相邻数据的最大差值
LeetCode 164. Maximum Gap (排序)
题解:首先,当然我们可以用快排,排完序之后,遍历一遍数组,就能得到答案了。但是快速排序的效率是O(n* logn),不是题目要求的线性效率,也就是O(n)的效率。
ShenduCC
2020/02/14
3790
MaximumGap-桶排序-最大间隔问题
题意:给定一个未排序的数组,返回其排序后的数组中 相邻元素之差 最大的值。 比如给定:[5,9,8,3,15] 排序后为:[3,5,8,9,15],相邻元素之差最大的是15-9=6,返回6。 复杂度要求:时间空间均为O(n)。 import java.util.Arrays; public class MaximumGap { // 桶排序-相邻最大值 public static int maximumGap(int[] arr) { if (arr == null || arr.length
sr
2018/08/20
3990
桶排序的算法
思路:设数组的长度为len,创建三个长度为len+1的(桶)数组。将数组的元素根据大小放在不同的桶中,其中,必定有差值大于一个桶的差存在,故同一个桶中不可能出现差值最大的。三个数组,一个为maxs,一个为mins,一个为hasNum.
曼路
2018/10/18
4050
Leetcode 164 Maximum Gap 桶排序好题
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. You may assume all elements in the array are non-negativ
triplebee
2018/01/12
8230
【数据结构与算法】排序算法
)O(1)Y比较插入排序对于近乎有序的数据处理速度比较快,复杂度有所下降,可以提前结束希尔O(nlogn)O(
程序员波特
2024/10/08
1580
【数据结构与算法】排序算法
大厂高频手撕算法题
目前互联网行业目前正在处于内卷状态,各个大厂不断提高招人门槛,前端工程师找工作也越发艰难,为了助力各位老铁能够在面试过程中脱颖而出,我结合自己的面试经验,准备了这三十六道面试过程中的手撕算法题,与各位共享。 一、冒泡排序 冒泡排序的思路:遍历数组,然后将最大数沉到最底部; 时间复杂度:O(N^2); 空间复杂度:O(1) function BubbleSort(arr) { if(arr == null || arr.length <= 0){ return []; }
前端迷
2020/09/30
1.1K0
大厂高频手撕算法题
JavaScript数据结构与算法-Sort
这个方法需要 (n + 1 + n + 1) = 2n + 2 次运算。 我们把 算法需要执行的运算次数 用 输入大小n 的函数 表示,即 T(n) 。
FinGet
2019/06/28
7370
JavaScript数据结构与算法-Sort
【JS】250- 十大排序的算法思路和代码实现
本文内容包括:(双向)冒泡排序、选择排序、插入排序、快速排序(填坑和交换)、归并排序、桶排序、基数排序、计数排序(优化)、堆排序、希尔排序。大家可以在这里测试代码。更多 leetcode 的 JavaScript 解法也可以在我的算法仓库中找到,欢迎查看~
pingan8787
2019/07/25
8330
【JS】250- 十大排序的算法思路和代码实现
LeetCode 164. 最大间距(桶排序)
说明: 你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。 请尝试在线性时间复杂度和空间复杂度的条件下解决此问题。
Michael阿明
2021/02/19
3410
力扣152——乘积最大子序列
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
健程之道
2020/02/12
5970
二分查找总结
二分查找是在每次匹配后,将查找的空间一分为二的算法,二分查找应该是有序的数组进行查找.
Tim在路上
2020/08/04
4810
相关推荐
算法刷题(3):相邻两数的最大差值
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验