首页 > 其他 > 详细

LeetCode-164 Maximum Gap

时间:2019-05-30 15:25:43      阅读:105      评论:0      收藏:0      [点我收藏+]

题目描述

Given an unsorted array, find the maximum difference between the successive elements in its sorted form.

Return 0 if the array contains less than 2 elements.

 

题目大意

给定一个乱序数组,要求找到该数组在有序情况下相邻两数字最大差值。

要求:在O(n)时间复杂度以及空间复杂度内完成。

 

示例

E1

Input: [3,6,9,1]
Output: 3

E2

Input: [10]
Output: 0

 

解题思路

感谢LeetCode@zkfairytale的代码得到效率更好的代码。

由于最终结果的差值大小一定 >= bucket_size = (max - min) / (n - 1),其中max为数组中最大值,min为最小值,n为数组元素个数,可将所有数字分配在各个大小为bucket_size的桶中。由上述条件可知,最终结果一定大于等于bucket_size,因此可以遍历两个相邻bucket之间的最大值与最小值来获得可能的最大的差值。

 

复杂度分析

时间复杂度:O(log(n))

空间复杂度:O(1)

 

代码

技术分享图片
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        return solve(nums, 0, nums.size() - 1);
    }
    //二分搜索
    int solve(vector<int>& nums, int low, int high) {
        if(low == high) 
            return low;
        
        int mid1 = (low + high) / 2;
        int mid2 = mid1 + 1;
        //寻找两个较大的数字之间的数字的位置
        if(nums[mid1] > nums[mid2])
            return solve(nums, low, mid1);
        else
            return solve(nums, mid2, high);
    }
};
技术分享图片

LeetCode-164 Maximum Gap

原文:https://www.cnblogs.com/heyn1/p/10949720.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!