//思路:分治思想。分别求出前后N/2个数的Min和Max。
import java.util.Scanner;
public class BeautyPro210 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
int[] result = searchMinMax(arr, 0, n - 1);
System.out.println(result[0]);
System.out.println(result[1]);
}
}
public static int[] searchMinMax(int[] arr, int low, int high) {
int[] result = new int[2];
if (high - low <= 1) {
if (arr[low] <= arr[high]) {
result[0] = arr[low];
result[1] = arr[high];
return result;
} else {
result[0] = arr[high];
result[1] = arr[low];
return result;
}
}
int[] leftMinMax = searchMinMax(arr, low, low + (high - low) / 2);
int[] rightMinMax = searchMinMax(arr, low + (high - low) / 2 + 1, high);
if (leftMinMax[0] < rightMinMax[0]) {
result[0] = leftMinMax[0];
} else {
result[0] = rightMinMax[0];
}
if (leftMinMax[1] < rightMinMax[1]) {
result[1] = rightMinMax[1];
} else {
result[1] = leftMinMax[1];
}
return result;
}
}
编程之美2.10 寻找数组中的最大值和最小值
最新推荐文章于 2021-01-10 12:39:05 发布