给定一个数组 prices ,它的第 i 个元素 prices_i 代表第i天该股票的价格,你只能选择在某一天买入这只股票,并在未来的某一个不同的日子卖出,设计一个算法来计算你能获取的最大利润,返回你可以从这笔交易中获取的最大利润。如果不能获取利润,返回0,写一段c代码
时间: 2024-09-06 12:05:36 浏览: 73
这是一个经典的动态规划问题,可以使用双指针策略解决,也就是“滑动窗口”思想。我们可以维护两个指针,一个表示当前的最低价格 `min_price`,另一个表示最高卖出价 `max_profit`。遍历数组的同时更新这两个值:
```c
#include <stdio.h>
#include <stdlib.h>
int maxProfit(int* prices, int n) {
if (n <= 0) return 0; // 如果数组为空或者只有一个元素,无法获取利润
int min_price = prices[0]; // 初始化最低价格为第一个价格
int max_profit = 0; // 初始最大利润为0
for (int i = 1; i < n; i++) { // 遍历数组
min_price = (prices[i] < min_price ? prices[i] : min_price); // 更新最小价格
max_profit = (max_profit > (prices[i] - min_price) ? max_profit : prices[i] - min_price); // 计算并更新最大利润
}
return max_profit;
}
int main() {
int prices[] = {7, 1, 5, 3, 6, 4}; // 示例数组
int size = sizeof(prices) / sizeof(prices[0]);
printf("Max Profit: %d\n", maxProfit(prices, size));
return 0;
}
```
这个 `maxProfit` 函数会返回在给定股票价格数组中最优的买卖策略所能获得的最大利润。如果有多个相同的最小价格点,它会选择最后一个,因为后面的高价可能会带来更大的利润。
阅读全文