浅谈 找到最高海拔 问题

找到最高海拔

问题:
有一个自行车手打算进行一场公路骑行,这条路线总共由 n + 1 个不同海拔的点组成。自行车手从海拔为 0 的点 0 开始骑行。

给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0 <= i < n)。请你返回 最高点的海拔

思路:
例:
输入:gain = [-5, 1, 5, 0, -7]
输出:1
解释:海拔高度依次为 [0, -5, -4, 1, 1, -6] 。最高海拔为 1 。

  1. 根据给出的数组求出海拔高度的数组。
  2. 对数组降序排序。
  3. 返回数组首元素即为最高点的海拔。
class Solution {
public:
    int largestAltitude(const vector<int>& gain) {
        vector<int> res;
        res.push_back(0);
        for(auto& g : gain) {
            res.push_back(g + res.back());
        }
        sort(res.rbegin(), res.rend());		// 使之降序排列
        return res.front();
    }
};

法二 ------ 不创建新数组,用中间变量求最大值法。

class Solution {
public:
    int largestAltitude(const vector<int>& gain) {
        auto var = 0;
        auto res = 0;
        for(auto& g : gain) {
            var += g;
            res = max(res, var);
        }
        return res;
    }
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值