Java中static Pair类型的getMinMax方法是什么?为何前缀标注Pair?
public class Geeks { static class Pair { int min; int max; } static Pair getMinMax(int arr[], int low, int high) { Pair minmax = new Pair(); Pair mml = new Pair(); Pair mmr = new Pair(); int mid; // 如果只有1个元素 if (low == high) { minmax.max = arr[low]; minmax.min = arr[low]; return minmax; } /* 如果有2个元素 */ if (high == low + 1) { if (arr[low] > arr[high]) { minmax.max = arr[low]; minmax.min = arr[high]; } else { minmax.max = arr[high]; minmax.min = arr[low]; } return minmax; } /* 如果元素数量大于2 */ mid = (low + high) / 2; mml = getMinMax(arr, low, mid); mmr = getMinMax(arr, mid + 1, high); /* 比较两部分的最小值 */ if (mml.min < mmr.min) { minmax.min = mml.min; } else { minmax.min = mmr.min; } /* 比较两部分的最大值 */ if (mml.max > mmr.max) { minmax.max = mml.max; } else { minmax.max = mmr.max; } return minmax; } /* 测试用主方法 */ public static void main(String args[]) { int arr[] = {1000, 11, 445, 1, 330, 3000}; int arr_size = 6; Pair minmax = getMinMax(arr, 0, arr_size - 1); System.out.printf("\nMinimum element is %d", minmax.min); System.out.printf("\nMaximum element is %d", minmax.max); } }
问题1解答:static Pair getMinMax的作用和实现逻辑
作用
这个静态方法的作用是接收int类型数组、数组查询范围的左边界low和右边界high,计算该下标范围内所有元素的最大值和最小值,将两个结果封装在Pair类对象中返回。
实现逻辑
方法采用分治算法实现,执行流程如下:
- 单元素边界处理:若当前查询范围只有1个元素(
low == high),该元素同时是最大值和最小值,直接封装返回。 - 双元素边界处理:若当前查询范围只有2个元素,直接比较两个元素的大小,分别赋值给
min和max后返回。 - 递归拆分:若查询范围内元素数量大于2,取中间下标
mid将范围拆分为左右两个子区间,分别递归调用getMinMax获取左区间的最值对象mml、右区间的最值对象mmr。 - 结果合并:比较两个子区间的最小值,取更小的作为整体最小值;比较两个子区间的最大值,取更大的作为整体最大值,封装后返回最终结果。
问题2解答:方法前标注内部类名Pair的原因
方法名前标注的Pair是该方法的返回值类型,是Java方法定义的固定语法要求:[修饰符] 返回值类型 方法名(参数列表) {方法体}。
Java的方法仅支持返回单个值,而该方法需要同时返回最大值、最小值两个int结果,所以提前定义了静态内部类Pair,用它的两个成员变量min和max分别存储两个结果,将两个值封装为一个Pair对象返回,因此方法的返回值类型必须声明为Pair。
补充说明:由于Pair是定义在Geeks类内部的静态内部类,在Geeks类内部可以直接使用Pair作为类型名,若在Geeks类外部使用该类型,需要写全类名Geeks.Pair。
内容的提问来源于stack exchange,提问作者Aahlad Kethineedi
相关产品推荐
相关产品推荐

