Problem: 1732. 找到最高海拔
文章目录
- 题目描述
- 思路及解法
- 复杂度
- Code
题目描述
思路及解法
1.求取数组gain的大小 n n n;
2.定义一个大小为 n + 1 n + 1 n+1的数组preSum;
3.先求取前 n n n个元素的前缀和,再最后单独处理preSum[n];其中preSum[n] = preSum[n - 1] + gain[n - 1];
4.求取处preSum中的最大元素;
复杂度
时间复杂度:
O ( n ) O(n) O(n)
空间复杂度:
O ( n ) O(n) O(n)
Code
class Solution {
public:
/**
* Prefix sum
*
* @param gain Given array
* @return int
*/
int largestAltitude(vector<int>& gain) {
int n = gain.size();
vector<int> preSum(n + 1);
int curSum = 0;
for (int i = 0; i < n; ++i) {
preSum[i] = curSum;
curSum += gain[i];
}
preSum[n] = preSum[n - 1] + gain[n - 1];
int maxRes = INT_MIN;
for (int i = 0; i < n + 1; ++i) {
maxRes = max(maxRes, preSum[i]);
}
return maxRes;
}
};