博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
N个未排序的随机数,在线性时间内,求这N个数在数轴上相邻两个数的最大值...
阅读量:6141 次
发布时间:2019-06-21

本文共 1376 字,大约阅读时间需要 4 分钟。

1 public class MaxSub 2 { 3     public static void main(String[] args) 4     { 5         int[] a ={5,7,3,1,6,2}; 6         System.out.println(maxSub(a)); 7  8     } 9     10     /**11      * @用于找出N个随机数在数轴相邻位置的最大差值12      */13     public static int maxSub(int[] a)14     {15        int min=a[0];//初始化数组的最小值min16        int max=a[0];//初始化数组的最大值max17     for (int i = 0; i < a.length; i++)//循环一次找出数轴最大最小值复杂度O(N)18     {19        if (a[i] < min)20          min = a[i];21        if (a[i] > max)22          max = a[i];23     }24     int[] count = new int[max-min+1];//记录数轴上位置的数组,从min开始到max结束25     for (int i = 0; i< max-min+1; i++)//初始化坐标轴数组  复杂度为O(max-min+1)和N线性关系26     {27        count[i] = 0;28     }29     for(int i = 0;i< a.length; i++)//标记数组a在数轴上位置  复杂度为O(N)30     {31      count[a[i]-min]++;32     } 33     int maxSub = 0;//最大差值34     int tempSub = 1;//数轴上相邻两个数的距离35     for(int i = 0;i< max-min+1; i++)//根据坐标轴上标记位置找出相邻最大差值maxSub 复杂度为O(max-min+1)36     {37       if (count[i]==0)tempSub++;38       else{39            if(tempSub>maxSub)40              {41               maxSub = tempSub;42              }43              tempSub = 1;44             }45      }46     return maxSub;47     }48 }

思路:

 复杂度为N找出最大值最小值,然后建立一个长度为最大值减去最小值加1的数组作为坐标轴。
 先初始化数组,数组每一项都为0,然后把原数组遍历, 对count[a[i]-min]++;相当于标记数组在坐标轴上位置,

最后找到相邻非零元素间最远距离即为最大差值

转载于:https://www.cnblogs.com/guizhongyi/p/4817160.html

你可能感兴趣的文章
Linux IP代理筛选系统(shell+proxy)
查看>>
Android笔记之属性动画
查看>>
数据持久层
查看>>
极光推送发送控制/别名/取值
查看>>
ArcGIS Engine开发前基础知识(4)
查看>>
Vivado Logic Analyzer的使用(二)
查看>>
[Git] git merge之squash
查看>>
C++/CLI
查看>>
Kerberos安全体系详解---Kerberos的简单实现
查看>>
Vuex demo
查看>>
新建swap分区的规划、挂载和自动挂载示例
查看>>
MySQL用户授权【转】
查看>>
我算是优秀的程序员吗?
查看>>
链表合并
查看>>
Delphi应用程序的调试(五)其他调试工具
查看>>
如何编写可维护的面向对象JavaScript代码
查看>>
win8: html5+css3+js
查看>>
Emacs 24.3支持cygwin上使用Win32 GUI
查看>>
对于一个排序数组,创建最低高度的Binary Tree
查看>>
Android-----判断是否有服务运行
查看>>