在O(n)时间复杂度内求无序数组中任意两个元素的最大差值,以及存在的组数

Posted 今天学什么

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在O(n)时间复杂度内求无序数组中任意两个元素的最大差值,以及存在的组数相关的知识,希望对你有一定的参考价值。

题目描述:

求无序数组中任意两个元素的最大差值,以及存在最大差值的组别数.

输入:

输入包含两行,第一行输入一个整数n;第二行n个正整数,用空格隔开.

输出:

输出为一行,包含最大差值,以及存在组别数.

样例输入:

4

4  1  2  1

输出:

3  2

一种实现代码如下(Java版):

 1 import java.util.Scanner;
 2 /**
 3  * 在O(n)时间复杂度内求无序数组中任意两个元素的最大差值,以及存在的组数
 4  * @author JiaJoa
 5  *
 6  */
 7 public class Main{
 8     public static void main(String args[]){
 9         Scanner cin = new Scanner(System.in);
10         int n = cin.nextInt();
11         int[] v = new int[n];
12         for(int i=0;i<n;i++){
13          v[i] = cin.nextInt();
14         }
15         getResult(n,v);
16         cin.close();
17     }
18         
19     public static void getResult(int n,int[] b){
20         int min = Integer.MAX_VALUE;  //记录最小值
21         int max = Integer.MIN_VALUE;  //记录最大值
22         int minCount = 0; //记录最小值的个数
23         int maxCount = 0; //记录最大值的个数
24         for(int i=0;i<n;i++){
25             if(b[i]==max){
26                 maxCount++;
27             }
28             if(b[i]>max){
29                 max = b[i];
30                 maxCount = 1;
31             }
32             
33             if(b[i]==min){
34                 minCount++;
35             }
36             if(b[i]<min){
37                 min = b[i];
38                 minCount = 1;
39             }
40         }
41         
42         int maxB = max - min;  //数组中两个数的最大差值
43         int count = maxCount*minCount;  //存在最大差值的组数
44         
45         System.out.println(maxB+" "+count);
46     }
47 }

 

以上是关于在O(n)时间复杂度内求无序数组中任意两个元素的最大差值,以及存在的组数的主要内容,如果未能解决你的问题,请参考以下文章

一个无序数组,任意两个数相加等于一个给定的数,并且用复杂度最小的方法得出

快速排序-无序数组K小元素

如何用快排思想在O(n)内查找第K大元素?

如何用快排思想在O(n)内查找第K大元素?

java面试题9

如何查找无序数组中的Top n