求数组数对之差的最大值

// 数对之差的最小值.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "string.h"


#define max(a, b) (a > b? a : b)
#define min(a, b) (a < b? a : b)

int findMaxDiff(int *pArray, int len);

int error = 0;


int _tmain(int argc, _TCHAR* argv[])
{
    int array[8] = {2, 4, 1, 16, 7, 5, 11, 9};
    int maxDiff = 0;

    maxDiff = findMaxDiff(array, 8);

    printf("max difference is %d\n", maxDiff);

    return 0;
}



int findMaxDiff(int* pArray, int len)
{
    if ((pArray == NULL) || (len < 1))
    {
        error = 1;
        return 0;
    }

    int  ret;
    int  curMin = pArray[0];
    int  curMax = pArray[0];
	

    for (int idx = 1; idx < len; ++idx)
    {
        curMin = min(curMin, pArray[idx]);
        curMax = max(curMax, pArray[idx]);
    }
	
    return curMax-curMin;
}


另外这道题有一种 log(N)的解法


引用出处


// 求数组的最大值和最小值,返回值在maxValue和minValue
void MaxandMin(int *a, int l, int r, int& maxValue, int& minValue)
{
    if(l == r) // l与r之间只有一个元素
    {
        maxValue = a[l] ;
        minValue = a[l] ;
        return ;
    }

    if(l + 1 == r) // l与r之间只有两个元素
    {
        if(a[l] >= a[r])
        {
            maxValue = a[l] ;
            minValue = a[r] ;
        }
        else
        {
            maxValue = a[r] ;
            minValue = a[l] ;
        }
        return ;
    }

    int m = (l + r) / 2 ; // 求中点

    int lmax ; // 左半部份最大值
    int lmin ; // 左半部份最小值
    MaxandMin(a, l, m, lmax, lmin) ; // 递归计算左半部份

    int rmax ; // 右半部份最大值
    int rmin ; // 右半部份最小值
    MaxandMin(a, m + 1, r, rmax, rmin) ; // 递归计算右半部份

    maxValue = max(lmax, rmax) ; // 总的最大值
    minValue = min(lmin, rmin) ; // 总的最小值
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值