在O(n)時間復雜度內求無序數組中任意兩個元素的最大差值,以及存在的組數
阿新 • • 發佈:2017-12-07
== 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 staticvoid 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 publicstatic 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)時間復雜度內求無序數組中任意兩個元素的最大差值,以及存在的組數