在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 }