Redian新闻
>
LeetCode 力扣官方题解 | 2016. 增量元素之间的最大差值

LeetCode 力扣官方题解 | 2016. 增量元素之间的最大差值

公众号新闻

2016.增量元素之间的最大差值(点击文末阅读原文查看题目)

题目描述

给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。

返回 最大差值 。如果不存在满足要求的 i 和 j ,返回 -1 。


示例 1:

输入:nums = [7,1,5,4]输出:4解释:最大差值出现在 i = 1 且 j = 2 时,nums[j] - nums[i] = 5 - 1 = 4 。注意,尽管 i = 1 且 j = 0 时 ,nums[j] - nums[i] = 7 - 1 = 6 > 4 ,但 i > j 不满足题面要求,所以 6 不是有效的答案。


示例 2:

输入:nums = [9,4,3,2]输出:-1解释:不存在同时满足 i < j 和 nums[i] < nums[j] 这两个条件的 i, j 组合。


示例 3:

输入:nums = [1,5,2,10]输出:9解释:最大差值出现在 i = 0 且 j = 3 时,nums[j] - nums[i] = 10 - 1 = 9 。


提示:

  • n == nums.length

  • 2 <= n <= 1000

  • 1 <= nums[i] <= 109



解决方案


方法一:前缀最小值


思路

当我们固定 j 时,选择的下标 i 一定是满足 0 ≤ i < j 并且 nums[i] 最小的那个 i。因此我们可以使用循环对 j 进行遍历,同时维护 nums[0..j−1] 的前缀最小值,记为 premin。这样一来:

  • 如果nums[i] > premin,那么就用 nums[i]− premin 对答案进行更新;

  • 否则,用 nums[i] 来更新前缀最小值 premin。


代码

C++

class Solution {public:    int maximumDifference(vector<int>& nums) {        int n = nums.size();        int ans = -1, premin = nums[0];        for (int i = 1; i < n; ++i) {            if (nums[i] > premin) {                ans = max(ans, nums[i] - premin);            } else {                premin = nums[i];            }        }        return ans;    }};

Java

class Solution {    public int maximumDifference(int[] nums) {        int n = nums.length;        int ans = -1, premin = nums[0];        for (int i = 1; i < n; ++i) {            if (nums[i] > premin) {                ans = Math.max(ans, nums[i] - premin);            } else {                premin = nums[i];            }        }        return ans;    }}

C#

 public class Solution {    public int MaximumDifference(int[] nums) {        int n = nums.Length;        int ans = -1, premin = nums[0];        for (int i = 1; i < n; ++i) {            if (nums[i] > premin) {                ans = Math.Max(ans, nums[i] - premin);            } else {                premin = nums[i];            }        }        return ans;    }}


Python3

class Solution:    def maximumDifference(self, nums: List[int]) -> int:        n = len(nums)        ans, premin = -1, nums[0]
for i in range(1, n): if nums[i] > premin: ans = max(ans, nums[i] - premin) else: premin = nums[i]         return ans


C

#define MAX(a, b) ((a) > (b) ? (a) : (b))
int maximumDifference(int* nums, int numsSize){ int ans = -1, premin = nums[0]; for (int i = 1; i < numsSize; ++i) { if (nums[i] > premin) { ans = MAX(ans, nums[i] - premin); } else { premin = nums[i]; } } return ans;}

JavaScript

var maximumDifference = function(nums) {    const n = nums.length;    let ans = -1, premin = nums[0];    for (let i = 1; i < n; ++i) {        if (nums[i] > premin) {            ans = Math.max(ans, nums[i] - premin);        } else {            premin = nums[i];        }    }    return ans;};


Golang

func maximumDifference(nums []int) int {    ans := -1    for i, preMin := 1, nums[0]; i < len(nums); i++ {        if nums[i] > preMin {            ans = max(ans, nums[i]-preMin)        } else {            preMin = nums[i]        }    }    return ans}
func max(a, b int) int { if b > a { return b } return a}
复杂度分析
  • 时间复杂度:O(n)。我们只需要对数组 nums 进行一次遍历。

  • 空间复杂度:O(1)



BY / 

本文作者:力扣

编辑&版式:Irene

声明:本文归“力扣”版权所有,如需转载请联系。


点个在看,少个 bug

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
孩子夜磨牙,肚里有寄生虫?缺微量元素?LeetCode 力扣官方题解 | 2104. 子数组范围和韩国高尔夫美女多,美国诺贝尔经奖多这部韩剧好看 《非常律师禹英隅》LeetCode 力扣官方题解 | 2055. 蜡烛之间的盘子留学圈疯传!商科生转码《Leetcode刷题指南》,信息量太大CODE01 推出后,机械革命计划发布新款 CODE GO 程序员本商科留学生转码必备:Leetcode到底该怎么刷?LeetCode 力扣官方题解 | 838. 推多米诺2022傅雷翻译出版奖获奖者揭晓 Le palmarès du Prix Fu Lei 2022 dévoilé题都白刷了?Amazon导师亲自为你揭秘LeetCode刷题真相!月光黯淡(二十二)LeetCode 力扣官方题解 | 6. Z 字形变换35岁被裁,刷LeetCode变成了自我感动...Leetcode出题人,揭秘打工体验!大国耗材——美俄之间的乌克兰,中美之间的日和韩另一种“推翻” VS Code 的尝试:JetBrains Fleet 现开放公测LeetCode刷完200道题,我竟然收到了亚麻的拒信...深度好文|打卡LeetCode的第100天,我才发现......GitHub疯传!求职亚麻的留学生,请立即停止刷LeetCode!LeetCode 力扣官方题解 | 537. 复数乘法挑战刷最少的题进大厂!不会刷leetcode的人,救星来了LeetCode 力扣官方题解 | 258. 各位相加LeetCode 力扣官方题解 | 917. 仅仅反转字母LeetCode 力扣官方题解 | 521. 最长特殊序列 Ⅰ男人之间的最大区别LeetCode 力扣官方题解 | 969. 煎饼排序Why do Tibetans think they are Chinese?拿下6家offer经验分享:刷LeetCode这件事,其实不靠努力!注意!眼下比刷LeetCode更重要的事发现了《Leetcode刷题指南》,我半年成功转码上岸【E诗配画】登鹳雀楼打卡LeetCode的第100天,我才发现......谷歌亚麻,越来越嫌弃Leetcode刷题家…气候变化 | IEEE 2023主席Saifur Rahman和IEEE代表团出席COP27
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。