zoukankan      html  css  js  c++  java
  • 164. Maximum Gap *HARD* -- 无序数组找出排序后连续元素的最大间隔

    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-negative integers and fit in the 32-bit signed integer range.

    class Solution {
    public:
        int maximumGap(vector<int>& nums) {
            int n = nums.size(), mini, maxi, i, j, k, prev = -1, ans = 0;
            if(n < 2)
                return 0;
            mini = maxi = nums[0];
            for(i = 1; i < n; i++)
            {
                if(nums[i] < mini)
                    mini = nums[i];
                if(nums[i] > maxi)
                    maxi = nums[i];
            }
            k = (maxi - mini) / n + 1;
            vector<vector<int>> v(n);
            for(i = 0; i < n; i++)
            {
                j = (nums[i] - mini) / k;
                if(0 == v[j].size())
                {
                    v[j].push_back(nums[i]);
                    v[j].push_back(nums[i]);
                }
                else
                {
                    v[j][0] = max(nums[i], v[j][0]);
                    v[j][1] = min(nums[i], v[j][1]);
                }
            }
            for(i = 0; i < n; i++)
            {
                if(0 == v[i].size())
                    continue;
                if(prev != -1)
                {
                    j = v[i][1] - v[prev][0];
                    ans = max(ans, j);
                }
                prev = i;
            }
            return ans;
        }
    };

    将nums分为n组,每组k = (maxi - mini) / n + 1个数,分别求出每组的最大值和最小值。

  • 相关阅读:
    Linux 内核开发—内核简单介绍
    strcmp函数和strcpy函数
    POJ 3734
    怎样使用SetTimer MFC 够具体
    java 递归函数
    海量数据存储
    使用WinINet和WinHTTP实现Http訪问
    getline函数
    UDP编程
    数据文件传输通道技术解决方式
  • 原文地址:https://www.cnblogs.com/argenbarbie/p/5796554.html
Copyright © 2011-2022 走看看