zoukankan      html  css  js  c++  java
  • 164. 最大间距 手写桶排

    给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。

    如果数组元素个数小于 2,则返回 0。

    示例 1:

    输入: [3,6,9,1]
    输出: 3
    解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
    示例 2:

    输入: [10]
    输出: 0
    解释: 数组元素个数小于 2,因此返回 0。
    说明:

    你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。
    请尝试在线性时间复杂度和空间复杂度的条件下解决此问题

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/maximum-gap
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    手写桶排

    class Solution {
    public:
        int maximumGap(vector<int>& nums) {
            int n = nums.size();
            if (n < 2) {
                return 0;
            }
    
            int imin = *min_element(nums.begin(), nums.end());
            int imax = *max_element(nums.begin(), nums.end());
            int size = max(1, (imax - imin) / (n - 1));
            int len = (imax - imin) / size + 1;
    
            vector <pair<int, int>> bucket(len, {-1, -1});
            for (int i = 0; i < n; i++) {
                int idx = (nums[i] - imin) / size;
                if (bucket[idx].first == -1) {
                    bucket[idx].first = nums[i];
                    bucket[idx].second = nums[i];
                }
                else {
                    bucket[idx].first = min(bucket[idx].first, nums[i]);
                    bucket[idx].second = max(bucket[idx].second, nums[i]);
                }
            }
    
            int ans = 0;
            int prev = -1;
            for (int i = 0; i < len; i++) {
                if (bucket[i].first == -1) {
                    continue;
                }
                if (prev != -1) {
                    ans = max(ans, bucket[i].first - bucket[prev].second);
                }
                prev = i;
            }
    
            return ans;
        }
    };
    
  • 相关阅读:
    Python 递归
    Python 面向过程编程
    Python 协程函数
    Python-第三方库requests详解
    Python 三元表达式
    linux copy
    centos 安装软件
    mysql 权限
    mysql 权限 备份
    android 开发
  • 原文地址:https://www.cnblogs.com/xgbt/p/14040997.html
Copyright © 2011-2022 走看看