● 122.买卖股票的最佳时机II
● 55. 跳跃游戏
● 45.跳跃游戏II
贪心算法是一种基于贪心策略的算法,在解决某些问题时非常有效。其基本思路是局部最优解能导致全局最优解。在这篇报告中,我们将使用贪心算法解决三个问题:122.买卖股票的最佳时机II,55.跳跃游戏,45.跳跃游戏II。我们将使用Java编写代码。
122.买卖股票的最佳时机II
题目描述:给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
我们可以使用贪心算法解决该问题。因为我们可以在股票价格上涨时买入,在价格下跌时卖出。这样,我们可以在每个连续的上升段买入并在上升段结束时卖出。
Java代码:
public int maxProfit(int[] prices) {
int profit = 0;
for (int i = 1; i < prices.length; i++) {
if (prices[i] > prices[i - 1]) {
profit += prices[i] - prices[i - 1];
}
}
return profit;
}
55.跳跃游戏
题目描述:给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。
我们可以使用贪心算法解决该问题。我们从左到右遍历该数组,计算能够到达的最远距离。如果最远距离大于等于数组的长度,说明可以到达最后一个下标。
Java代码:
public boolean canJump(int[] nums) {
int maxJump = 0;
for (int i = 0; i < nums.length; i++) {
if (maxJump < i) {
return false;
}
maxJump = Math.max(maxJump, i + nums[i]);
}
return maxJump >= nums.length - 1;
}
45.跳跃游戏II
题目描述:给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达最后一个下标。
我们可以使用贪心算法解决该问题。我们从左到右遍历该数组,计算能够到达的最远距离和当前能够到达的最远距离。当遍历到当前能够到达的最远距离时,说明需要再跳一次,更新最远距离。
Java代码:
public int jump(int[] nums) {
int jumps = 0;
int curJumpEnd = 0;
int curFarthest = 0;
for (int i = 0; i < nums.length - 1; i++) {
curFarthest = Math.max(curFarthest, i + nums[i]);
if (i == curJumpEnd) {
jumps++;
curJumpEnd = curFarthest;
}
}
return jumps;
}
以上就是使用贪心算法解决三个问题的Java代码。