美文网首页
2_20相邻两数最大差值

2_20相邻两数最大差值

作者: X_Y | 来源:发表于2017-09-06 17:07 被阅读13次

有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。

给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。

测试样例:
输入:[1,2,5,4,6],5
返回:2

class Gap {
public:
    int maxGap(vector<int> A, int n) {
        // write code here
        int max = A[0], min = A[0];
        int max_idx = 0, min_idx = 0;
        for(int i=1; i<n; i++){
            if(A[i] > max){
                max = A[i];  max_idx = i;
            }else if (A[i] < min){
                min = A[i];  min_idx = i;
            }
        }
        float step = (max - min) / (float)n;
        vector< list<int> > bucket(n+1);
        bucket[0].push_back(A[min_idx]);
        bucket[n].push_back(A[max_idx]);
        
        // 遍历数组,将元素放入桶内
        for(int i=0; i<n; i++){
            if(i==min_idx || i==max_idx){
                continue;
            }else{
            bucket[floor((A[i] - min)/step)].push_back(A[i]);
            }
        }

        // 遍历每个桶内的list,找出该桶内的最大值与与下一桶内最小值
        int max_gap = 0;
        int l_max = 0;
        int r_min = 0, r_max = 0;
        for(int i=0; i<n+1; ++i){
            if(!bucket[i].empty()){
                r_max = bucket[i].front();
                r_min = bucket[i].front();
                list<int>::iterator j = bucket[i].begin(); 
                for(; j!=bucket[i].end(); ++j){
                    if(*j > r_max){
                        r_max = *j;
                    }else if(*j < r_min){
                        r_min = *j;
                    }
                }
                if(i>0){
                    max_gap = r_min - l_max > max_gap ? r_min - l_max : max_gap;
//                    if(r_min - l_max > max_gap){
//                        max_gap = r_min - l_max;
//                    }
                }
                l_max = r_max;
            }
        }
        return max_gap;
    }
};

相关文章

  • 相邻两数的最大差值

    题目:相邻两数的最大差值

  • 2_20相邻两数最大差值

    有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。 给定一个int数组A和A的大小...

  • 相邻两数最大差值

    题目 有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。给定一个int数组A和A的...

  • 算法入门(二)

    一、习题练习 (1)数组排序之后相邻的最大差值 题:给定一个整型数组arr,返回排序之后相邻的两个数最大差值 解题...

  • Leetcode. 数组排序之后相邻数的最大差值

    问题 给定一个整型数组 arr, 返回排序后的相邻两数的最大差值. 例如:arr = [9, 3, 1, 10],...

  • 相机最小覆盖问题:https://leetcode.com/pr

    给定一个数组arr,返回如果排序之后,相邻两数的最大差值 要求:时间复杂度O(N)

  • 【算法】相邻最大差值

    问题描述 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N)例子:5,9,8,3,15那么排...

  • 数组排序之后相邻数的最大差值

    给定一个整型数组arr,返回排序后的相邻两数的最大差值举例:arr = [9,3,1,10]。如果排序,结果为[1...

  • 最大间隙问题

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

  • JS代码题3

    最大差值 给定一个未排序的数列,找到此数列在已排序状态下的两个相邻值的最大差值,少于两个值时返回0。例如:给定数列...

网友评论

      本文标题:2_20相邻两数最大差值

      本文链接:https://www.haomeiwen.com/subject/zxsvjxtx.html