【Leetcode】取消缓冲区同步在力扣上的使用方法

本文最后更新于:2023年10月6日 晚上 18:01

【Leetcode】取消缓冲区同步在力扣上的使用方法

废话不多说,直接上代码:

1
2
3
4
5
6
// 在最开始的地方加上这几行代码
auto optimize_cpp_stdio = []() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
return 0;
}();

优化效果有多大呢?我们来看看下面这道题:


714. 买卖股票的最佳时机含手续费

给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。

你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

返回获得利润的最大值。

注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。


优化前代码:

1
2
3
4
5
6
7
8
struct Solution {
inline int maxProfit(vector<int>& prices,int fee) {
int hold=-prices[0],unhold=0,maxn=prices.size();
for(int i=1;i<maxn;i++)
unhold=max(unhold,hold+prices[i]-fee),hold=max(hold,unhold-prices[i]);
return unhold;
}
};

结果:

没有优化

唉,明明已经是最最优的解法了,效率还是提不上去。。。


优化后代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
auto optimize_cpp_stdio = []() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
return 0;
}();
struct Solution {
inline int maxProfit(vector<int>& prices,int fee) {
int hold=-prices[0],unhold=0,maxn=prices.size();
for(int i=1;i<maxn;i++)
unhold=max(unhold,hold+prices[i]-fee),hold=max(hold,unhold-prices[i]);
return unhold;
}
};

结果:

开优化

哎呀,一不小心就超越100%了咧~

效率提升100%,内存也节省一点点。非常适合算法复杂度不高,IO比较大的场景!


【Leetcode】取消缓冲区同步在力扣上的使用方法
https://qalxry.github.io/2023/10/06/【Leetcode】取消读写缓冲区同步在力扣上的使用方法/
作者
しずり雪
发布于
2023年10月6日
更新于
2023年10月6日
许可协议