N个未排序的随机数,在线性时间内,求这N个数在数轴上相邻两个数的最大值...

本文介绍了通过遍历数组找出最大值和最小值,构建坐标轴数组并计算相邻非零元素间最大差值的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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];//初始化数组的最小值min
16        int max=a[0];//初始化数组的最大值max
17     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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值