未排列的n个数组元素的最大间距

10人阅读 评论(0) 收藏 举报
分类:
#include <iostream>
using namespace std;

template<class T>
int maxi(int n, T a[])
{
    int k = 1;
    for(int i=2; i <=n; i++)
    {
        if(a[i]>a[k])
        {
            k = i;
        }
    }
    return k;
}

template<class T>
int mini(int n, T a[])
{
    int k = 1;
    for(int i=2; i <=n; i++)
    {
        if(a[i]<a[k])
        {
            k = i;
        }
    }
    return k;
}

double maxgap(int n, double a[])
{
    double mina = a[mini(n, a)], maxa = a[maxi(n, a)];
    int *count = new int[n+1];
    double *low = new double[n+1];
    double *high = new double[n+1];

    int i;
    for(i=1; i<=n; i++)
    {
        count[i] = 0;
        low[i] = maxa;
        high[i] = mina;
    }

    for(i=1; i<=n; i++)
    {
        int bucket = (int)(a[i]-mina)/(maxa-mina)*(n-1)+1;
        cout << i << "  " << bucket <<endl;
        count[bucket]++;
        if(low[bucket] > a[i]) low[bucket] = a[i];
        if(high[bucket] < a[i]) high[bucket] = a[i];
    }

    for(i=1; i<=n; i++)
    {
        cout << low[i] << "  " << high[i] << endl;
    }

    double temp = 0, left = high[1];
    for(i=2; i<n; i++)
    {
        if(count[i])
        {
            double gap = low[i] - left;
            if(gap>temp) temp = gap;
            left = high[i];
        }
    }
    cout << temp << endl;
    delete [] count;
    delete [] low;
    delete [] high;
    return temp;
}


int _tmain(int argc, _TCHAR* argv[])
{
    int n;
    cin >> n;
    double *a = new double[n+1];
    for(int i=1; i<=n; i++)
        cin >> a[i];
    cout << maxgap(n, a) << endl;
    delete [] a;
    system("pause");
    return 0;
}
/*5 2.3 3.1 7.5 1.5 6.3
1  1
2  1
3  5
4  1
5  3
1.5  3.1
7.5  1.5
6.3  6.3
7.5  1.5
7.5  7.5
3.2
3.2*/
查看评论

给定一个无序数组,排序之后求相邻两数之间的最大差值

要求:时间复杂度O(n).思路:看到时间复杂度为O(n),肯定排除了常见的基于比较的排序,比如冒泡、快排等等。进而想到桶排序来解决此问题。首先数组有n个数,我们拿n+1个桶,首先遍历下数组找出最大值和...
  • zhou_209
  • zhou_209
  • 2018-02-28 21:50:47
  • 70

求一个数组,n个元素的不同组合(排列组合问题)

array('a1','b2','c3','d4','e5','x1','y1','z1');比如以上数组 我想要这个数组元素中三个元素的不同组合,例如下 array('a1','b2',...
  • qq_27682041
  • qq_27682041
  • 2017-06-04 23:50:05
  • 1000

最大间隙问题。给定 n 个实数,求这n个实数在数轴上相邻2个数之间的最大差值,设计解最大间隙问题的线性时间算法。

#include #include int main(){ float a[50]; float b[50]; float c,d; int n...
  • qq_22708467
  • qq_22708467
  • 2016-09-07 19:23:23
  • 748

华为OJ---给定n个字符串,对n个字符串按照字典序排列

题目描述 给定n个字符串,对n个字符串按照字典序排列。 输入描述 输入第一行为一个正整数n(1 输出描述 数据输出n行,输出结果为按照字典排列的字符串。 输入例子: 9 cap ...
  • cnd2449294059
  • cnd2449294059
  • 2017-06-29 10:29:09
  • 763

Maximum Gap 寻找数组中排序后相邻两个数的最大差值,桶排序,O(n)

Given an unsorted array, find the maximum difference between the successive elements in its sorted f...
  • tuzigg123
  • tuzigg123
  • 2015-09-07 14:53:36
  • 2197

有1,2,3,...,n,n<=9,这n个数全排列,从小到大排好,计算第k个数是什么

从高位到低位依次选择 int findKthNumber(int n,long k){ if(n9||k
  • bison2008
  • bison2008
  • 2011-11-08 14:59:06
  • 763

对数组元素进行编号问题!

对数组A中的N (0例如数组A=(5,3,4,7,3,5,6)则输出为:(3,1,2,5,1,3,4)运行程序 #include void main(){int i,j,k,n;int m=1,r=1...
  • fengzar1984
  • fengzar1984
  • 2007-04-07 23:17:00
  • 900

算法与数据结构面试分享(十八)一排N(最大1M)个正整数+1递增,乱序排列,第一个不是最小的,把它换成-1,最小数为a且未知求第一个被

这是百度的一道面试题。一排N(最大1M)个正整数+1递增,乱序排列,第一个不是最小的,把它换成-1,最小数为a且未知。求第一个被-1替换掉的数原来的值,并分析算法复杂度。其实这道题并不难,关键是大家能...
  • gaoming201314
  • gaoming201314
  • 2018-04-16 19:22:42
  • 15

N个正整数随机排列

这次我们要生成前N个正整数的一个随机排列 书中给出三种算法如下: 前提:需要一个随机数生成函数randInt(begin,end),生成从begin 到 end 的随机数 算法一:  ...
  • Immorwave
  • Immorwave
  • 2017-08-10 12:22:49
  • 253

数组元素循环右移问题

一、 实验目的   (1)熟练使用循环语句。   (2)熟练理解和掌握顺序存储与数据处理算法的关系。 二、 实验内容 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整...
  • u011575885
  • u011575885
  • 2014-03-04 21:55:15
  • 2279
    个人资料
    等级:
    访问量: 475
    积分: 198
    排名: 79万+
    文章存档
    最新评论