首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

算法基础之寻觅最大最小值

2012-07-05 
算法基础之寻找最大最小值分治思想求解N个数中的最大值max和最小值min:分别求出前后N/2个数中的max和min,

算法基础之寻找最大最小值
分治思想求解N个数中的最大值max和最小值min:分别求出前后N/2个数中的max和min,然后取较大的max和较小的min。
比较次数:f(N) = 2*f(N/2) + 2 = ... = 1.5N - 2。

import java.util.Arrays;/** * 寻找最大最小值 【分治】 *  * @author aaron-han *  */public class FindMaxMin {public static void main(String[] args) {int[] arr = com.utils.Utils.randomIntArray();System.out.println(Arrays.toString(arr));int[] result = findMaxMin(arr, 0, arr.length - 1);System.out.println("Max = " + result[1] + " , Min = " + result[0]);}// 0存小 1存大public static int[] findMaxMin(int[] arr, int low, int high) {if (high - low <= 1) {return arr[low] < arr[high] ? new int[] { arr[low], arr[high] }: new int[] { arr[high], arr[low] };}int[] left = findMaxMin(arr, low, low + (high - low) / 2);int[] right = findMaxMin(arr, low + (high - low) / 2 + 1, high);return new int[] { left[0] < right[0] ? left[0] : right[0],left[1] > right[1] ? left[1] : right[1] };}}

热点排行