• 164. Maximum Gap


    Given an unsorted array, find the maximum difference between the successive elements in its sorted form.

    Return 0 if the array contains less than 2 elements.

    Example 1:

    Input: [3,6,9,1]
    Output: 3
    Explanation: The sorted form of the array is [1,3,6,9], either
                 (3,6) or (6,9) has the maximum difference 3.

    Example 2:

    Input: [10]
    Output: 0
    Explanation: The array contains less than 2 elements, therefore return 0.

    Note:

    • You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.
    • Try to solve it in linear time/space.

    AC code:

    class Solution {
    public:
        int maximumGap(vector<int>& nums) {
            int len = nums.size();
            if (len < 2) return 0;
            int minn = nums[0];
            int maxx = nums[0]; 
            for (int i = 1; i < len; ++i) {
                minn = min(minn, nums[i]);
                maxx = max(maxx, nums[i]);
            }
            int gaps = (int)ceil((double)(maxx - minn) / (len-1));  // the numbers of burket
            vector<int> gap_min(len-1, INT_MAX);
            vector<int> gap_max(len-1, INT_MIN);
            for (int i = 0; i < len; ++i) {
                if (nums[i] == minn || nums[i] == maxx)
                    continue;
                int idx = (nums[i] - minn) / gaps;
                gap_min[idx] = min(gap_min[idx], nums[i]);
                gap_max[idx] = max(gap_max[idx], nums[i]);
            }
            int maxdis = INT_MIN;
            int prev = minn;
            for (int i = 0; i < len-1; ++i) {
                if (gap_min[i] == INT_MAX && gap_max[i] == INT_MIN)
                    continue;
                maxdis = max(maxdis, gap_min[i] - prev);
                prev = gap_max[i];
            }
            maxdis = max(maxx-prev, maxdis);
            return maxdis;
        }
    };
    

    Runtime: 8 ms, faster than 56.67% of C++ online submissions for Maximum Gap.

    Analylis:

    step1:

    calculating numbers between the min number and the max number in the array. 

    step2:

    using gaps buckets to equallt distributed the numbers.

    step3:

    find the max and min numbers in each buckets.

    step4:

    the maximum gap is max(gaps, buckets[i]'s min_number - buckets[i-1]'s max_number);

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    MySQL 使用Anemometer基于pt-query-digest将慢查询可视化
    MySQL explain 中key_len的计算
    MySQL explain 详解
    Linux 误删libc.so.6
    Linux crontab 的格式及定义
    Azure容器监控部署(上)
    容器监控部署 -- 整体架构
    Prometheus 介绍
    zabbix自动停用与开启agent
    在jenkins中处理外部命令7z的异常
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9874884.html
Copyright © 2020-2023  润新知