N个未排序的随机数,在线性时间内,求这N个数在数轴上相邻两个数的最大值
2015-09-17 17:55
127 查看
public class MaxSub { public static void main(String[] args) { int[] a ={5,7,3,1,6,2}; System.out.println(maxSub(a)); } /** * @用于找出N个随机数在数轴相邻位置的最大差值 */ public static int maxSub(int[] a) { int min=a[0];//初始化数组的最小值min int max=a[0];//初始化数组的最大值max for (int i = 0; i < a.length; i++)//循环一次找出数轴最大最小值复杂度O(N) { if (a[i] < min) min = a[i]; if (a[i] > max) max = a[i]; } int[] count = new int[max-min+1];//记录数轴上位置的数组,从min开始到max结束 for (int i = 0; i< max-min+1; i++)//初始化坐标轴数组 复杂度为O(max-min+1)和N线性关系 { count[i] = 0; } for(int i = 0;i< a.length; i++)//标记数组a在数轴上位置 复杂度为O(N) { count[a[i]-min]++; } int maxSub = 0;//最大差值 int tempSub = 1;//数轴上相邻两个数的距离 for(int i = 0;i< max-min+1; i++)//根据坐标轴上标记位置找出相邻最大差值maxSub 复杂度为O(max-min+1) { if (count[i]==0)tempSub++; else{ if(tempSub>maxSub) { maxSub = tempSub; } tempSub = 1; } } return maxSub; } }
思路:
复杂度为N找出最大值最小值,然后建立一个长度为最大值减去最小值加1的数组作为坐标轴。
先初始化数组,数组每一项都为0,然后把原数组遍历, 对count[a[i]-min]++;相当于标记数组在坐标轴上位置,
最后找到相邻非零元素间最远距离即为最大差值
相关文章推荐
- idea配置运行参数无效
- TPCC-MySQL的安装与使用
- JQuery直接调用asp.net后台WebMethod方法
- Rsync实现文件定时同步技巧
- Nim 中的引用和指针
- ubuntu 下tomcat配置
- ubuntu windows mysql 中文乱码解决
- windows 彻底删除360文件 360zipext.dll 等等
- 使用mdadm快速创建RAID5
- linux ubuntu 服务器键盘设置错误 完美解决
- win7中远程桌面连接是窗口无法最大化的解决方法
- Linux(Ubuntu)下电信3G CDMA 华为 EC169无线上网卡拨号(转)
- hibernate update部分更新(转)
- 12.04 源
- ubuntu dash 左边搜索栏 不见 missing 的解决方法
- ubuntu boot中grub误操作 导致系统开进grub
- ubuntu12.04. 分辨率不对 开机Could not apply the stored configuration for monitors
- ubuntu sudo自动切换root 无需输入密码
- ubunt 12.04 64位 english 服务器版安装
- myeclipse python插件安装和环境配置(Windows7下)