算法学习网址:wansuanfa.com (玩算法的拼音)
今天在刷题的时候看到这样一个评论,一网友说这道题是工行广州研发中心的面试题,这题比较简单,我们后面在看。
提到银行大家可能特别好奇他们招聘开出的薪资,尤其是四大行的工农中建。因为今天要讲的这道题是工行的面试题,所以我今天就在网上查找并整理了一下最近3个月内工行招聘的岗位,地址以及开出的薪资,因为查找的特别多,这里只整理了其中的一部分,如下面的表格所示。
今天的这道题是LeetCode的第1732题,是一道非常简单的题,除了工行考这题以外,还有网友说:属实是给我们送自信来了。所以我们可以看出这题是多么的简单,下面我们就来看下。
问题描述
来源:LeetCode第1732题
难度:简单
有一个自行车手打算进行一场公路骑行,这条路线总共由 n + 1 个不同海拔的点组成。自行车手从海拔为 0 的点 0 开始骑行。
给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i + 1 的 净海拔高度差(0 <= i < n)。请你返回 最高点的海拔 。
示例1:
输入:gain = [-5,1,5,0,-7]
输出:1
解释:海拔高度依次为 [0,-5,-4,1,1,-6] 。最高海拔为 1 。
示例2:
输入:gain = [-4,-3,-2,-1,4,3,2]
输出:0
解释:海拔高度依次为 [0,-4,-7,-9,-10,-6,-3,-1] 。最高海拔为 0 。
n == gain.length
1 <= n <= 100
-100 <= gain[i] <= 100
前缀和解决
这题是让返回最高点的海拔,而自行车手的起始点海拔为0,数组中的每个值都是两点之间的海拔差,实际上就是后一个地点的海拔高度减去前一个地点的海拔高度,也就是说题中给出的数组就是一个差分数组,我们只需要计算原数组的值,然后找出最大值即可,这个最大值就是我们要求的结果。
怎么求原数组呢,我们知道差分数组的前缀和就是原数组中的值,我们只需要累加差分数组即可计算出原数组中的每一个值,然后顺便记录一下最大值即可。
JAVA
public int largestAltitude(int[] gain) {int res = 0, cur = 0;for (int num : gain) {cur += num;res = Math.max(res, cur);}return res;
}
C++
public:int largestAltitude(vector<int>& gain) {int res=0,cur=0;for(int num:gain) {cur+=num;res=max(res,cur);}return res;}
-------------------------end-------------------------
笔者简介
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解700多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。
耗时两年终于出版了!
写了6年半的公众号,写出了10万粉丝,感谢大家对王一博的关注。
网友:这题是微软面试题,也是清华和南京大学考研真题,考研题是25分。
网友:华为面试题,一个小时做不出来,哭了。
小鹏汽车二面原题,网友直呼太狠了。
特斯拉公开面试题,想了一天才想出来!
招商银行秋招面试题,比较简单,当时做出来了!
建设银行面试原题,太难了,没做出来!