题解 | #最大差值#

最大差值

https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204

解题思路

这是一道求数组中满足条件的最大差值的问题,主要思路如下:

  1. 问题分析:

    • 给定长度为 的数组
    • 需要找到满足 的最大值
    • 即找到后面的数减去前面的数的最大差值
  2. 解决方案:

    • 维护一个数组 d 记录前 个数的最小值
    • 遍历数组,用当前值减去前面的最小值,更新最大差值
  3. 优化点:

    • 一次遍历计算前缀最小值
    • 一次遍历计算最大差值
    • 无需额外空间,可以原地修改

代码

#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    int getDis(vector<int>& A, int n) {
        if (n < 2) return 0;
        
        // 记录前i个数的最小值
        int minVal = A[0];
        // 记录最大差值
        int maxDiff = 0;
        
        // 遍历数组,更新最大差值
        for (int i = 1; i < n; i++) {
            maxDiff = max(maxDiff, A[i] - minVal);
            minVal = min(minVal, A[i]);
        }
        
        return maxDiff;
    }
};
import java.util.*;

public class Solution {
    public static int getDis(int[] A, int n) {
        if (n < 2) return 0;
        
        // 记录前i个数的最小值
        int minVal = A[0];
        // 记录最大差值
        int maxDiff = 0;
        
        // 遍历数组,更新最大差值
        for (int i = 1; i < n; i++) {
            maxDiff = Math.max(maxDiff, A[i] - minVal);
            minVal = Math.min(minVal, A[i]);
        }
        
        return maxDiff;
    }
}
class Solution:
    def getDis(self , A: List[int], n: int) -> int:
        if n < 2:
            return 0
        
        # 记录前i个数的最小值
        min_val = A[0]
        # 记录最大差值
        max_diff = 0
        
        # 遍历数组,更新最大差值
        for i in range(1, n):
            max_diff = max(max_diff, A[i] - min_val)
            min_val = min(min_val, A[i])
        
        return max_diff

算法及复杂度

  • 算法:一次遍历
  • 时间复杂度: - 只需要遍历一次数组
  • 空间复杂度: - 只需要常数额外空间
全部评论

相关推荐

今天投了小鹏,收到了AI面,大概会问哪些啊?
期末一定及格:总共4个部分,心理测评、行测、然后就是问岗位、对岗位的理解、过往遇到了哪些难点怎么解决,很简单,没有什么特别专业的问题,都是一些综合素质相关的
点赞 评论 收藏
分享
“校招”、“3-5年经验”
xiaolihuamao:逆向工程不是搞外挂的吗,好像现在大学生坐牢最多的就是诈骗罪和非法侵入计算机系统罪,发美金,还居家办公,就是怕被一锅端,
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务