1. 程式人生 > >在O(n)時間復雜度內求無序數組中任意兩個元素的最大差值,以及存在的組數

在O(n)時間復雜度內求無序數組中任意兩個元素的最大差值,以及存在的組數

== result scan span pub ger oid 最小值 lose

題目描述:

求無序數組中任意兩個元素的最大差值,以及存在最大差值的組別數.

輸入:

輸入包含兩行,第一行輸入一個整數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)時間復雜度內求無序數組中任意兩個元素的最大差值,以及存在的組數