CCF201612 中間數(JAVA)
阿新 • • 發佈:2018-11-15
問 題 描述: |
問題描述 在一個整數序列a1, a2, …, an中,如果存在某個數,大於它的整數數量等於小於它的整數數量,則稱其為中間數。在一個序列中,可能存在多個下標不相同的中間數,這些中間數的值是相同的。 輸入格式 輸入的第一行包含了一個整數n,表示整數序列中數的個數。 輸出格式 如果約定序列的中間數存在,則輸出中間數的值,否則輸出-1表示不存在中間數。 樣例輸入 6 樣例輸出 5 樣例說明 比5小的數有2個,比5大的數也有2個。 樣例輸入 4 樣例輸出 -1 樣例說明 在序列中的4個數都不滿足中間數的定義。 樣例輸入 5 樣例輸出 -1 樣例說明 在序列中的5個數都不滿足中間數的定義。 評測用例規模與約定 對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。 |
package intermediateNumber; import java.util.Scanner; public class Main { @SuppressWarnings("resource") public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt();// 整數個數 int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } System.out.println(midNum(arr)); } public static int midNum(int[] arr) { for (int i = 0; i < arr.length - 1; i++) // 排序 for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } int mid = (arr.length) / 2;// 中位數下標 if (arr.length % 2 == 0)// 整數個數為偶數 { if (arr[mid] != arr[mid - 1])// 中間兩個數不相等 return -1; else { for (int a = 1; (mid + a < arr.length) && (arr[mid + a] == arr[mid] || arr[mid - 1 - a] == arr[mid]); a++) // 經排序過後中間數若有重複必然對稱出現,否則不合題意 if (arr[mid + a] != arr[mid - 1 - a]) return -1; } } else// 整數個數為奇數 { for (int a = 1; (mid + a < arr.length) && (arr[mid + a] == arr[mid] || arr[mid - a] == arr[mid]); a++) // 經排序過後中間數若有重複必然對稱出現,否則不合題意 if (arr[mid + a] != arr[mid - a]) return -1; } return arr[mid]; } }