给定一个数组 prices【6】,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计 一个算法来计算你所能获取的最大利润。c语言
时间: 2024-10-03 10:03:16 浏览: 15
在C语言中,你可以使用动态规划(Dynamic Programming)来解决这个问题,也就是著名的「股市买卖」问题。以下是基本的算法步骤:
1. 初始化两个变量 `min_price` 和 `max_profit`,分别表示到目前为止的最低价格和最大利润。初始化时,假设第一天的最低价格为第一项 `prices[0]`,最大利润为0。
2. 遍历整个数组 `prices`,从第二天开始:
- 如果当前价格 `prices[i]` 小于 `min_price`,则更新 `min_price` 为这个价格。因为如果这一天的价格更低,那么我们可以在这个价格买入,等待更高价格卖出。
- 否则,计算 `prices[i] - min_price`,这个差值代表了在 `min_price` 这一天买入并在 `prices[i]` 这一天卖出可以获得的利润。取这个值和当前的 `max_profit` 中较大的作为新的 `max_profit`。
3. 当遍历完整个数组后,`max_profit` 就是你能获取的最大利润。
下面是伪代码形式的算法:
```c
int maxProfit(int prices[], int n) {
int min_price = prices[0];
int max_profit = 0;
for (int i = 1; i < n; i++) {
if (prices[i] < min_price) {
min_price = prices[i];
} else {
int profit_here = prices[i] - min_price;
max_profit = MAX(max_profit, profit_here);
}
}
return max_profit;
}
```