递归求序列最大最小值

原创 2017年08月24日 16:45:20

这学期总算开了算法课了,不得不吐槽,大四上学期开这课,时间很尴尬。不多说了,第一节课老师留了道题,要求在一个递归函数里求序列的最大最小值。


算法思路:
1)如果数组长度为1,则最大值与最小值相等
2)如果数组长度为2,则最大值与最小值各位其中一个。
3)如果数组长度大于2,那么采用二分策略,递归求前一半的最大最小值,与后一半的最大最小值,之后两两比较后的数组的最大最小值。


代码如下:

#include <iostream>
#include <cmath>
using namespace std;

bool MinMax(int* num , int start, int end , int& Min , int& Max)
{
    //end小于start没有意义 
    if(end <start){
        return false;
    }else if(end == start){
        //序列长度为1,最大值与最小值相等 
        Min = Max = num[start];
    }else if(end - start == 1){
        //序列长度为2,一个为最小值,一个为最大值 
        Min = min(num[start],num[end]);
        Max = max(num[start],num[end]);
        return true;
    }else{
        //序列长度大于2,递归找前一半的最大最小值
        //后一半的最大最小值,两者进行比较 
        int mid = (start + end) / 2;
        int tmp_max,tmp_min;
        MinMax(num,start,mid,tmp_min,tmp_max);
        MinMax(num,mid+1,end,Min,Max);
        Max = max(tmp_max,Max);
        Min = min(tmp_min,Min);
        return true;
    }
}

int main()
{
    int size;
    cin>>size;
    int* num,Min,Max;
    num = new int[size];
    for(int i = 0 ; i< size; i++){
        cin>>num[i];
    }
    if(MinMax(num,0,size-1,Min,Max)){
        cout<<"Max = "<<Max<<endl;
        cout<<"Min = "<<Min<<endl;  
    }

    return 0;
}

截图:
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。若需转载,请注明http://blog.csdn.net/qq_30091945 举报

相关文章推荐

递归求数组最大最小值(分治思想)

求数组最大最小值我们可以用遍历或者最简单的排序方法来实现,但是那样子的时间复杂度将会大很多,因此我们可以采用分治思想来求最大最小值,即先求左右两部分,即先求出左半部分的最大最小值,再求出右半部分的最大...

利用递归求最大子序列

利用递归来求最大自序列,主要来源于 数据结构与算法分析 一书 对于一个序列A1,A2,…….An,求其最大自序列.利用普通的循环来做的话,所花费的时间有点大,便考虑用递归,但递归的缺点也很明显,用...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

编写一个程序,被调用后,能求出平均分,最高分,最低分

问题描述: 有一个一维数组,存放十个学生的成绩,编写一个程序,当主函数调用此函数后,能求出平均分,最高分,最低分。 解题思路: 众所周知,一个函数只能带回一个函数返回值,此处,要求通过函数调用得...

不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数

以下五种方法分别求出较大的数和较小的数的方法。较小数的代码在注释中,但未运行测试。 int Find1(int a, int b) { return ((a + b) + abs(a - b)) ...

数组中最大值和最小值(《编程珠玑(续)》第15章)

笔试题&面试题:给定n个数,要求比较次数1.5n同时找出最大值和最小值

写出一个算法,对给定的n个数的序列,返回序列中的最大和最小的数. 设计出一个算法,只需要执行1.5n次比较就能找到序列中最大和最小的数吗?能否再少? 分析:要求比较次数为1.5n,使用一般的逐个遍...

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

问题描述:给出一个数组,包含N个整数,那么需要比较多少次找到最大值和最小值 注意:要想得到最大值和最小值,遍历一遍数组是不可避免的。我们能减少的就是减少比较次数来提高效率 方法一、遍历一遍...

2823 Sliding Window

题目大意: 给你n个

线性序列中同时求出最大值和最小值

在一个线性序列中同时求出最大值和最小值 题目描述:在一个线性序列中同时求出最大值和最小值;    方法一:初时看到这个题目,第一想法就是设定一个初始的最大值和最小值,然后循环遍历数组,进行比较,如下所...

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

问题描述:给出一个数组,包含N个整数,那么需要比较多少次找到最大值和最小值 注意:要想得到最大值和最小值,遍历一遍数组是不可避免的。我们能减少的就是减少比较次数来提高效率 方法一、遍历一遍...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)