当前位置: 首页 > news >正文

兰州模板网站建设长沙网站推广合作

兰州模板网站建设,长沙网站推广合作,老师直播课,wordpress邮件评论无序数组排序后的最大相邻差 问题:一个无序的整型数组,求出该数组排序后的任意两个相邻元素的最大差值?要求时间和空间复杂度尽可能低。 三种方法: 排序后计算比较 简介:用任意一种时间复杂度为 O ( n log ⁡ n ) O…

无序数组排序后的最大相邻差

问题:一个无序的整型数组,求出该数组排序后的任意两个相邻元素的最大差值?要求时间和空间复杂度尽可能低。

三种方法:

  1. 排序后计算比较

    • 简介:用任意一种时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn) 的排序算法给原数组排好序。然后遍历排序好的数组,并对每两个相邻元素求差,最终得到最大差值。
    • 思考:时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),在不改变原数组的情况下,空间复杂度为 O ( n ) O(n) O(n)(存储排序好的数组)。但这道题显然不是用来排序的。
  2. 利用计数排序的思想

    • 简介:求出原数组的最大最小值max和min,区间长度k=max - min +1,偏移量 min。创建一个长度为k的数组。遍历原数组,若原数组值为n,则array[n-min]的值加1。遍历新数组,统计最大连续出现0值的次数+1,就是相邻元素的最大差值。
    • 思考:若原数组是 1, 10000003,10000006 这三个元素呢,没办法了,想到了桶排序好像可以解决这个问题
  3. 利用桶排序的思想

    • 简介:根据原数组长度n,创建n个桶,每个桶代表一个区间范围,区间跨度是(max - min) / (n-1)。遍历原数组,对应元素放到桶中,记录每个桶的最大最小值。遍历桶,统计每个桶的最大值和右侧非空桶的最小值的差,数值最大的差即为最大相邻差。

    • 代码:

      public class MaxSortedDistance {public static int getMaxSortedDistance(int[] array){//1.得到原数组的最大值和最小值 和 区间跨度int max = array[0];int min = array[0];for(int i=1; i<array.length; i++) {if(array[i] > max) {max = array[i];}if(array[i] < min) {min = array[i];}}int d = max - min;//如果max和min相等,说明数组所有元素都相等,返回0if(d == 0){return 0;}//2.初始化桶,桶的数量和元素的数量一样多int bucketNum = array.length;Bucket[] buckets = new Bucket[bucketNum];for(int i = 0; i < bucketNum; i++){buckets[i] = new Bucket();}//3.遍历原始数组,确定每个桶的最大最小值for(int i = 0; i < array.length; i++){//确定数组元素所归属的桶下标int index = ((array[i] - min)  * (bucketNum-1) / d);// 存到合适的最大最小值的位置if(buckets[index].min==null || buckets[index].min>array[i]){buckets[index].min = array[i];}if(buckets[index].max==null || buckets[index].max<array[i]){buckets[index].max = array[i];}}//4.遍历桶,找到最大差值int leftMax = buckets[0].max;  // 存储第一个桶的最大值int maxDistance = 0;for (int i=1; i<buckets.length; i++) {// 如果右侧的桶没有最小值,就直接遍历下一个桶if (buckets[i].min == null) {  continue;}// 记录好最大差if (buckets[i].min - leftMax > maxDistance) {maxDistance = buckets[i].min - leftMax;}leftMax = buckets[i].max;}// 返回最大相邻差return maxDistance;}/*** 桶,只存储最大值和最小值*/private static class Bucket {Integer min;Integer max;}public static void main(String[] args) {int[] array = new int[] {7,2,2,9,1,22,6};System.out.println(getMaxSortedDistance(array));}
      }
    • 时间复杂度和空间复杂度都是 O ( n ) O(n) O(n)

http://www.hkea.cn/news/646344/

相关文章:

  • 千库网素材南宁seo优势
  • 西安机场商务宾馆百度做网站怎么在百度上做网站
  • ps网站建设seo网络公司
  • 网站建设步骤 教 程网站怎么做谷歌推广
  • 网站制作需要注意什么潍坊做网站哪家好
  • 专门做团购的网站有哪些色盲图
  • 百度做网站续费费用百度营业执照怎么办理
  • 深圳网站建设方维网络企业网站制作要求
  • 制作好网站黑帽seo教程
  • 云南 网站建设网站seo优化对网店的推广的作用为
  • 网站建设免费国外舆情服务公司
  • 怎么做网站banner查排名网站
  • 做网站好看的背景图片相关搜索优化软件
  • 怎么查网站是哪家制作公司做的百度收录查询
  • 企业年金交了有好处吗网络优化工程师吃香吗
  • python做网站开发百度6大核心部门
  • 自己做网站平台企业网站优化价格
  • 淘宝网网站建设的需求分析百度会员登录入口
  • 建网站的专业公司推广网站多少钱
  • 网站不去公安局备案自己怎么搭建网站
  • 外贸网站建设入门深圳网络推广哪家
  • 网站模板资源公司网站推广
  • 广东省建设教育协会官方网站首页html简单网页代码
  • 个人网站意义阿里指数官网最新版本
  • 网站开发方式有哪四种搜索引擎优化课程总结
  • 申请做网站、论坛版主app推广接单
  • 青海网站建设广州seo优化推广
  • 物流公司网站制作模板上海网站关键词排名
  • 广西建设人才网搜索引擎优化的目标
  • 比汉斯设计网站素材图片搜索识图入口