• 164. Maximum Gap


    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.

    Example 1:

    Input: [3,6,9,1]
    Output: 3
    Explanation: The sorted form of the array is [1,3,6,9], either
                 (3,6) or (6,9) has the maximum difference 3.

    Example 2:

    Input: [10]
    Output: 0
    Explanation: The array contains less than 2 elements, therefore return 0.

    Note:

    • You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.
    • Try to solve it in linear time/space.
      public class Solution {
          public int maximumGap(int[] nums) {
              if (nums.length < 2) return 0;
              bucketSort(nums);
      
              int maxDiff = Integer.MIN_VALUE;
              for (int i = 1; i < nums.length; ++i) {
                  maxDiff = Math.max(maxDiff, nums[i] - nums[i - 1]);
              }
              return maxDiff;
          }
      
          private static void bucketSort(int[] nums) {
              if (nums.length < 2) return;
              int minValue = Integer.MAX_VALUE;
              int maxValue = Integer.MIN_VALUE;
      
              for (int i : nums) {
                  minValue = Math.min(minValue, i);
                  maxValue = Math.max(maxValue, i);
              }
              final int bucketSize = (maxValue - minValue) / nums.length + 1;
              final int bucketCount = (maxValue - minValue) / bucketSize + 1;
              final ArrayList<Integer>[] buckets = new ArrayList[bucketCount];
              for (int i = 0; i < buckets.length; ++i) {
                  buckets[i] = new ArrayList<>();
              }
      
              for (int x : nums) {
                  final int index = (x - minValue) / bucketSize;
                  buckets[index].add(x);
              }
      
              for (final ArrayList<Integer> list : buckets) {
                  Collections.sort(list);
              }
      
              int i = 0;
              for (final ArrayList<Integer> list : buckets) {
                  for (int x : list) {
                      nums[i++] = x;
                  }
              }
          }
      }

      桶排序:桶个数,桶容量,index

    • final int bucketSize = (maxValue - minValue) / nums.length + 1;
      final int bucketCount = (maxValue - minValue) / bucketSize + 1;
      final int index = (x - minValue) / bucketSize;

      https://blog.csdn.net/afei__/article/details/82965834

  • 相关阅读:
    python字符串
    php设计模式 ---单例模式.
    PHP设计模式---策略模式
    PHP设计模式---适配器模式
    PHP设计模式---抽象工厂模式
    windows下安装redis
    PHP基础知识汇总(四)
    PHP面向对象整理
    PHP基础知识汇总(三)
    PHP基础知识汇总(二)
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11504112.html
Copyright © 2020-2023  润新知