题目

类型:数组
image.png

解题思路

一个显然的做法是两层循环找合适的 i 和 j,这样的做法是 增量元素之间的最大差值 - 图2的。

目的是找到能够取得最大差值的数对,对于每个数对中的 nums[i] 而言,对应的 nums[j] 必然第是坐标 i 左侧的最小值,因此可以通过边遍历边维护最小值 min 的做法,从而将复杂度降到 O(n)。

代码

  1. class Solution {
  2. public int maximumDifference(int[] nums) {
  3. int n = nums.length, ans = -1;
  4. for (int i = 0, min = nums[0]; i < n; i++) {
  5. if (nums[i] > min) ans = Math.max(ans, nums[i] - min);
  6. min = Math.min(min, nums[i]);
  7. }
  8. return ans;
  9. }
  10. }