zoukankan      html  css  js  c++  java
  • 《程序员代码面试指南》第八章 数组和矩阵问题 数组排序之后相邻数的最大差值

    题目

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

    java代码

    package com.lizhouwei.chapter8;
    
    /**
     * @Description: 数组排序之后相邻数的最大差值
     * @Author: lizhouwei
     * @CreateDate: 2018/5/9 21:56
     * @Modify by:
     * @ModifyDate:
     */
    public class Chapter8_26 {
        public int maxGap(int[] arr) {
            int max = Integer.MIN_VALUE;
            int min = Integer.MAX_VALUE;
            int len = arr.length;
            int maxGap = 0;
            for (int i = 0; i < arr.length; i++) {
                max = Math.max(max, arr[i]);
                min = Math.min(min, arr[i]);
            }
            boolean[] hasNum = new boolean[len + 1];
            int[] maxs = new int[len + 1];
            int[] mins = new int[len + 1];
            int index = 0;
            for (int i = 0; i < arr.length; i++) {
                index = bucket(arr[i], max, min, len);
                maxs[index] = hasNum[index] ? Math.max(maxs[index], arr[i]) : arr[i];
                mins[index] = hasNum[index] ? Math.min(mins[index], arr[i]) : arr[i];
                hasNum[index] = true;
            }
            int i = 0;
            while (i <= len) {
                if (hasNum[i++]) {
                    max = maxs[i - 1];
                    break;
                }
            }
            while (i <= len) {
                if (hasNum[i]) {
                    maxGap = Math.max(maxGap, mins[i] - max);
                    max = maxs[i];
                }
                i++;
            }
            return maxGap;
        }
    
        public int bucket(long cur, long max, long min, long len) {
            return (int) ((cur - min) * len / (max - min));
        }
    
        //测试
        public static void main(String[] args) {
            Chapter8_26 chapter = new Chapter8_26();
            int[] arr = {9, 3, 1, 10};
            int res = chapter.maxGap(arr);
            System.out.print("数组{9, 3, 1, 10}排序之后相邻数的最大差值: " + res);
        }
    }
    
    

    结果

  • 相关阅读:
    C struct的内存对齐
    C++ 继承、函数重载
    C++ 操作符重载
    C中入栈顺序和运算顺序有关系吗?
    Java 关于finally、static
    C++ 类的复制控制
    Linux中vi的使用
    C++ 类的头文件、实现、使用
    (web)个人项目(挖宝网)
    MariaDB使用enum和set
  • 原文地址:https://www.cnblogs.com/lizhouwei/p/9017057.html
Copyright © 2011-2022 走看看