分治递归:求数组元素的最大值,最小值

//分治递归,求数组元素的最大值,最小值
/**
 * 保存产生的最大值,最小值
 * @author Administrator
 *
 */
public class Values {
    private int max;
    private int min;

    public Values(int max,int min){
        this.max=max;
        this.min=min;
    }
    public int getMax() {
        return max;
    }
    public void setMax(int max) {
        this.max = max;
    }
    public int getMin() {
        return min;
    }
    public void setMin(int min) {
        this.min = min;
    }
}

/**
 * 分治递归找出数组元素中的最大数,最小数
 * @author Administrator
 *
 */
public class MinMax {
    public void min_max(int a[],int s,int e,Values values){
        Values lValues=new Values(0,0);
        Values rValues=new Values(0,0);

        if(e==s+1||e==s){
            if(a[s]>=a[e]){
                values.setMax(a[s]);
                values.setMin(a[e]);
            }
            else{
                values.setMax(a[e]);
                values.setMin(a[s]);
            }
            return;
        }

        int mid=(e+s)/2;
        min_max(a,mid+1,e,lValues);
        min_max(a,s,mid,rValues);
        values.setMax(lValues.getMax()>rValues.getMax()?lValues.getMax():rValues.getMax());
        values.setMin(lValues.getMin()<rValues.getMin()?lValues.getMin():rValues.getMin());
    }
}

/**
 * 分治递归找出数组元素中的最大数,最小数
 * @author Administrator
 *
 */
public class MinMax {
    public void min_max(int a[],int s,int e,Values values){
        Values lValues=new Values(0,0);
        Values rValues=new Values(0,0);

        if(e==s+1||e==s){
            if(a[s]>=a[e]){
                values.setMax(a[s]);
                values.setMin(a[e]);
            }
            else{
                values.setMax(a[e]);
                values.setMin(a[s]);
            }
            return;
        }

        int mid=(e+s)/2;
        min_max(a,mid+1,e,lValues);
        min_max(a,s,mid,rValues);
        values.setMax(lValues.getMax()>rValues.getMax()?lValues.getMax():rValues.getMax());
        values.setMin(lValues.getMin()<rValues.getMin()?lValues.getMin():rValues.getMin());
    }
}
时间: 2024-10-12 04:37:30

分治递归:求数组元素的最大值,最小值的相关文章

求数组元素的最大值最小值

这是编程之美上的一个题目: 一般的做法: void main() { int a[5]={78,63,78,67,18}; int min=0,max=0; min=max=a[0]; for(int i=0;i<5;i++) { if(min>a[i]) min=a[i]; if(max<a[i]) max=a[i]; } printf("%d,%d\n",max,min); } 这种方法总共比较了2*N次 如何降低比较次数呢? 我在这里着重记录一下分冶法的做法:

写一个方法求数组中的最大值,最小值,总和以及平均值。

class Program { /// <summary> /// 求数组中的最大值,最小值,总和以及平均值. /// </summary> /// <param name="nums">输入一个数组</param> /// <returns>返回一个新的数组(max,min,sum,avg)</returns> public static int[] GetMaxMinSumAvg(int[] nums) { i

求数组所有区间最大值减去最小值之差的和(贝壳笔试题)

这个题直接暴力求解的话时间复杂度肯定是不行的,所以,我们要计算每个数值的贡献,对每一个数求他当最小值当了多少次,当最大值当了多少次,最后当最大值的次数乘以这个数值减去当最小值的次数乘以数值就得到这个数的贡献,依次把这n个数的贡献加起来就是整个极差之和. 在计算一个数当了多少最值的时候,我们要理解问题,因为区间是连续的,所以,以最小值为例,如果一个数是当前这段区间的最小值,那么他一定是当前这段区间最小的(这不废话),所以,我们就找到他往左做多能找到多少个连续的数都比他大,记录这个位置,同理找他右边

递归求数组的最大值

科大讯飞的一个线下笔试题 对递归也一直不熟悉 题目:求一个数列的最大值,用递归形式: public class blanket{ public static void main(String[] args) { int[] a = {1,9,2,5,3,7,4,6,12,435,67,23,232,564564,5}; int max1 = max(a,0,0); System.out.println(max1); // return max1; } public static int max(

寻找数组中的最大值最小值

解法一: 分别求出数组中的最大值和最小值.先扫描一遍数组,找出最大的数和最小的数.需要比较2*N次. 解法二: 一般情况下,最大值和最小值不相同.所以把数组分成两部分,然后再从这两部分中分别找出最大值和最小值. 最后,从奇偶数位上分别求出Max=9,Min=3,各需要比较N/2次,整个算法共需要比较1.5*N次. 解法三: 解法二破坏了数组,如果在遍历过程中进行比较,而不需要交换元素,就可以不破坏数组了.首先仍然按顺序将数组中相邻的两个数分在同一组(概念上的分组),然后利用两个变量Max,和Mi

经典算法详解(11)递归查找数组中的最大值

题目:编写一个程序,用递归的方法实现查找数组中的最大值. C++实现 1 #include<iostream> 2 3 using namespace std; 4 //第一种方法是常规方法,不是使用递归,首先将第一个元素的值赋值给max,然后遍历数组, 5 //当遇到超高max的值时将其赋值给max,最后就将得到最大值 6 int getMax_fir(int *arr,int n) { 7 int max = arr[0]; 8 for (int i = 1; i < n; i++)

在iOS中求数组元素中最大数与最小数

之前求数组中某个数中的最大值与最小值.还真一个个比較,后来看到这种方法后,我就醉了 NSArray *testArray = [NSArray arrayWithObjects:@"-2.0", @"2.3", @"3.0", @"4.0", nil]; NSNumber *sum = [testArray valueForKeyPath:@"@sum.floatValue"]; NSNumber *avg

0130 遍历数组:数组遍历、数组长度、注意点、求数组中的最大值等案例

1.4.1 数组遍历 ? 遍历:把数组中的每个元素从头到尾都访问一次(类似学生的点名),可以通过 for 循环索引遍历数组中的每一项. var arr = ['red','green', 'blue']; for(var i = 0; i < arr.length; i++){ console.log(arrStus[i]); } 1.4.2 数组的长度 数组的长度:默认情况下表示数组中元素的个数 使用"数组名.length"可以访问数组元素的数量(数组长度). var arrS

class 3 求数组中的最大值(单元测试)

1.问题引出: int Largest(int list[], int length) { int i,max; for(i = 0; i < (length – 1); i ++ ) { if(list[i] > max) { max=list[i]; } } return max; } 由此段程序编写一个正确的程序实现求数组的最大值. #include <iostream> using namespace std; int Largest(int list[],int leng