太可笑了。。。我第一次跑出来 2ms 的成绩竟然使用暴力算法跑出来的。不过也可能是因为测试比较小的原因
超过了 90% 的 C++ 代码。。。
class Solution {
public:
/**
*
* @param prices int整型vector
* @return int整型
*/
int maxProfit(vector<int>& prices) {
// write code here
int result = 0;
int tmp;
for(int i =0; i < prices.size() - 1; ++i){
for( int j = i+1; j < prices.size(); ++j ){
tmp = prices[j] - prices[i];
if(tmp > result) result = tmp;
}
}
return result;
}
}; 时间复杂度是 O(n^2) 空间复杂度是 O(1)
另一种思路先预处理成差值,然后使用最大子数组的形式求解:
这种时间是 6ms
class Solution {
public:
/**
*
* @param prices int整型vector
* @return int整型
*/
int maxProfit(vector<int>& prices) {
// write code here
int *profiles = new int[prices.size() - 1];
// 计算差
for(int i = 0; i < prices.size() - 1; ++i){
profiles[i] = prices[i+1] - prices[i];
}
// 计算最大子数组
int result = INT_MIN;
int tmp = 0;
for(int i = 0; i < prices.size() - 1; ++i){
tmp += profiles[i];
if(tmp > result) result = tmp;
if(tmp < 0 ) tmp = 0;
}
return result < 0 ? 0 : result;
}
}; 算法的时间复杂度是 O(2n) 空间复杂度是 O(n)
参照博客为 https://blog.nowcoder.net/n/854e8febecba4f1a835f04f9c1f921ac

京公网安备 11010502036488号