zoukankan      html  css  js  c++  java
  • LeetCode Maximum Gap

    class Solution {
    public:
        int maximumGap(vector<int> &num) {
            int len = num.size();
            int gap = 0;
            sort(num.begin(), num.end());
            for (int i=0; i<len-1; i++) {
                int cgap = num[i+1] - num[i];
                if (cgap > gap) {
                    gap = cgap;
                }
            }
            return gap;
        }
    };

    等会去看下discuss,找了一个使用基数排序的,发现比快排多了一倍的时间。

    第二轮:

    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.

    只能说自己实现的挫:

    #include <iostream>
    #include <map>
    #include <vector>
    #include <cmath>
    
    using namespace std;
    
    
    class Bucket {
    private:
        int min_value;
        int max_value;
        int idx;
        bool isempty;
    public:
        Bucket() : min_value(INT_MAX), max_value(INT_MIN) {
            isempty = true;
        }
        void push(int v) {
            if (min_value > v) {
                min_value = v;
            }
            if (max_value < v) {
                max_value = v;
            }
            isempty = false;
        }
        bool empty() {return isempty;}
        int getMax() {return max_value;}
        int getMin() {return min_value;}
        int getIdx() {return idx;}
        void setIdx(int val) {idx = val;}
    };
    
    class Solution {
    public:
        int maximumGap(vector<int> &num) {
            int n = num.size();
    
            if (n < 2) {
                return 0;
            }
    
            int maxv = INT_MIN;
            int minv = INT_MAX;
            for (int e : num) {
                if (e > maxv) {
                    maxv = e;
                } else if (e < minv) {
                    minv = e;
                }
            }
    
            int diff = maxv - minv;
    
            int min_gap = ceil(diff * 1.0 / (n-1));
            int bn = diff / min_gap + 1;
    
            map<int, Bucket> buckets;
    
            for (int e : num) {
                int idx = (e - minv) / min_gap;
                if (buckets.count(idx) < 1) {
                    buckets[idx] = Bucket();
                }
                buckets[idx].push(e);
            }
    
            auto iter = buckets.begin();
    
    
            Bucket last = iter->second;
            int max_gap = last.getMax() - last.getMin();
    
            for (iter++;iter!=buckets.end();iter++) {
                int gap = iter->second.getMin() - last.getMax();
                if (gap > max_gap) {
                    max_gap = gap;
                }
                gap = iter->second.getMax() - iter->second.getMin();
                if (gap > max_gap) {
                    max_gap = gap;
                }
                last = iter->second;
            }
            return max_gap;
        }
    };
    
    int main() {
        vector<int> data  ={1,1,1,1,1,5,5,5,5,5};
        
        Solution s;
        int gap = s.maximumGap(data);
        cout<<gap<<endl;
        return 0;
    }
  • 相关阅读:
    Redis数据库
    Nginx介绍
    shell脚本基础
    iptables防火墙
    Web自动化测试—Selenium文件操作
    Web自动化测试——Selenium之发送163邮件
    Web自动化测试—Selenium webdriver的基本操作
    Web自动化测试—webdriver的环境配置
    Web自动化测试—Selenium IDE的安装与使用
    Web自动化测试—什么是Selenium?
  • 原文地址:https://www.cnblogs.com/lailailai/p/4176322.html
Copyright © 2011-2022 走看看