题目
类型:数组
解题思路
一个显然的做法是两层循环找合适的 i 和 j,这样的做法是 的。
目的是找到能够取得最大差值的数对,对于每个数对中的 nums[i] 而言,对应的 nums[j] 必然第是坐标 i 左侧的最小值,因此可以通过边遍历边维护最小值 min 的做法,从而将复杂度降到 O(n)。
代码
class Solution {
public int maximumDifference(int[] nums) {
int n = nums.length, ans = -1;
for (int i = 0, min = nums[0]; i < n; i++) {
if (nums[i] > min) ans = Math.max(ans, nums[i] - min);
min = Math.min(min, nums[i]);
}
return ans;
}
}