题目:写一个函数,在一个数列中找到差值最大的两个点,注意一定是后面的值减去前面的值。
解题思路:从后往前遍历数组,记录到当前位置为止,当前值最大的元素的索引、当前最大插值信息(包括最大差值,最大差值对应的左索引,最大差值对应的右索引)等,直到遍历到数组的第一个元素,就找到了数组对应的最大插值以及与其相对应的左索引、右索引。属于一种动态规划的方法。时间复杂度:O(n),空间复杂度O(1)。
对应的C++代码如下:
#include<iostream>
using namespace std;
struct max_difference
{
int left; //最大差值对应的左操作数
int right; //最大差值对应的右操作数
int difference; //最大差值
bool result; //返回的结果是否正确
};
max_difference find_max_difference(int* arr,int arr_length)//此函数用于在长度为arr_length的数组arr中寻找最大差值,返回记录最大差值信息的结构体
{
max_difference max_dif={0,arr_length-1,0x80000000,false};
if(arr_length<=1) //数组长度不能小于2
return max_dif;
int max_index=arr_length-1;
for(int i=arr_length-2;i>=0;i--)
{
if((arr[max_index]-arr[i])>max_dif.difference) //更新最大差值信息
{
max_dif.difference=arr[max_index]-arr[i];
max_dif.right=max_index;
max_dif.left=i;
}
if(arr[i]