Java实现利用分治法找到数组中的最大最小元素

Java实现利用分治法找到数组中的最大最小元素

基本思路:

不断的寻找数组的左子数组和右子数组,当左子数组和右子数组的长度为1时,最大最小元素均为本身,当左子数组和右子数组的长度为2时,直接进行一次比较分别得出两个子数组的最大最小元素,然后将子问题合并,在两个子数组中寻找到更大的元素作为大元素,更小的元素作为小元素,递归完成后,即可获得正确结果。

Java代码如下:

public class FindMaxAndMin {
    public static void main(String[] args) {
        int[] ans = {6, 8, 4, 4, 6, 36, 673, 13, 6, 7, 3, 4, 6, 8, 3, 7, 5, 7, 9, 5};
        int[] res = find(ans, 0, ans.length - 1);
        System.out.println("最小元素为"+res[0]);
        System.out.println("最大元素为"+res[1]);
    }

    private static int[] find(int[] ans, int left, int right) {
        int mid = (left + right) / 2;
        //当left == right 时,最大最小元素均为ans[left]
        if (left == right) {
            int[] res = new int[2];
            res[0] = ans[left];
            res[1] = ans[right];
            return res;
        }
        //当left + 1 == right时,比较得出最大最小元素
        if (right - left == 1) {
            int[] res = new int[2];
            res[0] = Math.min(ans[left], ans[right]);
            res[1] = Math.max(ans[left], ans[right]);
            return res;
        }
        //分别找出左子数组和右子数组的最大最小元素
        int[] Lres = find(ans, left, mid);
        int[] Rres = find(ans, mid + 1, right);
        //将子问题合并,找出两个子数组中的最小元素和最大元素
        int[] res = merge(ans, Lres, Rres, left, mid, right);
        return res;
    }

    private static int[] merge(int[] ans, int[] Lres, int[] Rres, int mid, int left, int right) {
        int[] res = new int[2];
        res[0] = Math.min(Lres[0], Rres[0]);
        res[1] = Math.max(Lres[1], Rres[1]);
        return res;
    }
}

运行结果如下:

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值