数对之差的最大值-递归版-非跌代版

#include <iostream>

#include <gtest/gtest.h>

/**********************************************

Description:动态规划法求数对之差最大值

Input:numbers-原数组,length-数组长度

Output:数对之差最大值

*********************************************/

int maxDiffDPV(int numbers[],size_t length){

if(length==0||length==1)

return 0;
int max;
return maxDiffDP(numbers,length-1,max);
}

/**********************************************

Description:当前子数组numbers[0-i]数对之差最大值

Input:numbers-原数组,i用于表示子数组的终止下标,max-当前子数组最大值

Output:当前子数组数对之差最大值

*********************************************/

int maxDiffDP(int numbers[],int i,int &max){

//终止条件不能是单个元素组成的数组,单个元素已经在主函数maxDiffDPV中处理
if(i==1){
max=numbers[0]>numbers[1]?numbers[0]:numbers[1];
return (numbers[0]-numbers[1]);
}
int maxSub;
int subDiff=maxDiffDP( numbers,i-1,maxSub);
int crossDiff=maxSub-numbers[i];
max=maxSub>numbers[i]?maxSub:numbers[i];
return crossDiff>subDiff?crossDiff:subDiff;
}

TEST(ljk, wjl)
{
int numbers[]={1,2,10,-1,6,9,-4};
int result=maxDiffDPV(numbers,7);
cout<<result<<endl;
EXPECT_EQ(14,maxDiffDPV(numbers,7));
}

int _tmain(int argc, _TCHAR* argv[])
{
testing::GTEST_FLAG(filter) = "ljk.wjl";
testing::InitGoogleTest(&argc, argv);
RUN_ALL_TESTS();
return 0;
}

测试结果如下:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值