zoukankan      html  css  js  c++  java
  • maximum-gap(经过了提示)

    下面的分桶个数做的不太好,原来的解法是用的 

    int gap = (big - small) / vlen;
            if (gap == 0) {
                gap = 1;
            }

    下面是现在的Java解法:

    package com.company;
    
    import java.util.*;
    
    class Solution {
        public int maximumGap(int[] nums) {
            if (nums.length < 2) {
                return 0;
            }
    
            // 用 Radix 排序
            int small = Integer.MAX_VALUE;
            int big = 0;
            for (int num : nums) {
                if (num < small) {
                    small = num;
                }
                if (num > big) {
                    big = num;
                }
            }
            System.out.println("big is " + big + " small " + small);
            int gap = (big - small - 1) / (nums.length - 1) + 1;
            if (gap == 0) {
                return 0;
            }
            int gap_num = (big - small) / gap + 1;
            int[] first = new int[gap_num];
            int[] second = new int[gap_num];
            // [ )
            System.out.println("gap is " + gap + " len is " + nums.length + "big is " + big + " small " + small);
            for (int num : nums) {
                int index = (num - small) / gap;
                if (first[index] == 0 || num < first[index]) {
                    first[index] = num;
                }
                if (second[index] == 0 || num > second[index]) {
                    second[index] = num;
                }
            }
            int ret = -1;
            int last = -1;
            for (int i=0; i<gap_num; i++) {
                if (first[i] == 0) {
                    continue;
                }
                if (last == -1) {
                    last = second[i];
                    ret = last - first[i];
                }
                else {
                    if (first[i] - last > ret) {
                        ret = first[i] - last;
                    }
                    if (second[i] - first[i] > ret) {
                        ret = second[i] - first[i];
                    }
                    last = second[i];
                }
    
            }
            return ret;
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
            System.out.println("Hello!");
            Solution solution = new Solution();
    
            int[] nums = {1,1,1,1,1,5,5,5,5,5};
    
            int ret = solution.maximumGap(nums);
            System.out.printf("Get ret: %s
    ", ret);
    
            /*Iterator<List<Integer>> iterator = ret.iterator();
            while (iterator.hasNext()) {
                Iterator iter = iterator.next().iterator();
                while (iter.hasNext()) {
                    System.out.printf("%d,", iter.next());
                }
                System.out.println();
            }*/
    
            System.out.println();
    
        }
    }
  • 相关阅读:
    挖矿病毒入侵-分析总结
    Linux查看包依赖关系的神器-repoquery分享
    Elasticsearch 字段为空(null)记录查询
    Python 导数 Elasticsearch 元数据到CSV
    基于docker快速构建MySQL主从复制环境
    Redis环境简单部署(集群/双机)
    FTP 脚本 to Shell脚本&bat脚本&python脚本
    专用服务器模式&共享服务器模式
    CentOS 7安装部署ELK 6.2.4-SUCCESS
    zabbix 数据库迁移变更
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6005126.html
Copyright © 2011-2022 走看看