ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

最大间隙问题

2019-12-26 10:03:31  阅读:251  来源: 互联网

标签:最大 min int max 间隙 blockNumber 问题 num double


简介

采用鸽笼原理;可以达到O(1);

code

#include<stdio.h> 
#include <iostream>
#include <vector>
using namespace std;
typedef struct BLOCK {
    int blockNumber;
    double min;
    double max;
    BLOCK(int _blockNumber=0, double _min=1000, double _max=-1000) {
        min = _min;
        max = _max;
        blockNumber = _blockNumber;
    }
};
int main() {
    int n;
    cin >> n;
    vector<double> num(n);
    double min = 1000; double max = -1000;
    for (int i = 0; i < n; i++) {
        cin >> num[i];
        if (num[i] > max) {
            max = num[i];
        }
        if (num[i] < min) {
            min = num[i];
        }
    }
    vector<BLOCK> b(n - 1);
    double gap = (max - min) / (n - 1);
    //只选择去掉最大值进行  投球
    for (int i = 0; i < n; i++) {
        if (num[i] == max ) {
            continue;
        }
        int index = (n - 1)*(num[i] - min) / (max - min);
        b[index].blockNumber++;
        if (b[index].max < num[i]) {
            b[index].max = num[i];
        }
        if (b[index].min > num[i]) {
            b[index].min = num[i];
        }
    }
    // max分开处理
    b[n - 2].blockNumber++;
    if (b[n - 2].max < max) {
        b[n - 2].max = max;
    }
    if (b[n - 2].min > max) {
        b[n - 2].min = max;
    }
    double maxGap = 0;
    for (int i = 0; i < n - 2; i++) {
        if (b[i].max - b[i].min > maxGap) {
            maxGap = b[i].max - b[i].min;
        }
        double lastMax = b[i].max;
        while (b[i + 1].blockNumber == 0) {
            if (i + 1 == n - 1) {
                break;
            }
            i++;
        }
        if (b[i+1].min - lastMax > maxGap) {
            maxGap = b[i+1].min - lastMax;
        }
    }
    cout << maxGap << std::endl;
    system("pause");
    return 0;
}

测试样本

5 2.3 3.1 7.5 1.5 6.3

输出

3.2

标签:最大,min,int,max,间隙,blockNumber,问题,num,double
来源: https://www.cnblogs.com/eat-too-much/p/12100474.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有