题目
- 题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。
例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,
数对之差的最大值是11,是16 减去5 的结果。
思路
- Solution1: 将其转换成求最大子数组问题。引入辅助数组diff,长度为n-1。diff[i]=dif[i]-diff[i+1]。求出最大子数组以及位置low,high。则对应最大差为data[low]-data[high+1]。
- Solution2: 使用动态规划法。假设data[i]减去某个数,其最大的数对差为currentMax。
则data[i-1]的最大数对差为data[i-1]-data[i]和data[i-1]-data[i]+currentMax中的较大的那一个。从后往前遍历数组,记录最大的currentMax以及对应的low、high输出即可。
时间复杂度O(n),空间复杂度O(1)。
实现
|
|