● 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代码。

04-05 14:33