Maximum Gap

来源:互联网 发布:御彩轩计划软件 编辑:程序博客网 时间:2024/05/22 16:58

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> &num) {const int SIZE = num.size();if (SIZE < 2)return 0;for (int i = 0; i < 32; i++){vector<int> sorted(SIZE);int k[] = {0, 0};for (int j = 0; j < SIZE; j++){int filter = 1 << i;int tmp = (filter & num[j]) >> i;if (0 == tmp)k[0]++;elsek[1]++;}k[1] += k[0];for (int j = SIZE - 1; j >= 0; j--){int filter = 1 << i;int tmp = (filter & num[j]) >> i;sorted[--k[tmp]] = num[j];}for (int j = 0; j < SIZE; j++)num[j] = sorted[j];}int res = num[1] - num[0];for (int i = 2; i < SIZE; i++)res = max(res, num[i] - num[i-1]);return res;}};


0 0