大家好,我是阿Q,牛群的迁徙问题让我来解决!
题目考察的知识点
动态规划
题目解答方法的文字分析
这道题目可以使用动态规划来解决。我们定义一个dp数组,其中dp[i]表示从初始位置到达rivers[i]所需要的最小跳跃次数。我们可以通过迭代数组rivers来填充dp数组,同时计算每一步的最小跳跃次数。
具体步骤如下:
- 初始化dp数组为INT_MAX,长度与rivers数组相同。dp[0]表示从初始位置到达初始位置的最小跳跃次数,因为初始位置不需要跳跃,所以dp[0] = 0。
- 从第一个河流位置开始,依次遍历数组rivers,对于每个位置i,我们遍历从当前位置i向前跳跃的所有可能距离j(0 <= j <= rivers[i]),计算从初始位置到达位置i+j的最小跳跃次数。
- 更新dp[i+j]为min(dp[i+j], dp[i] + 1)。这里dp[i] + 1表示从初始位置跳到位置i再跳一次到位置i+j。
- 最后返回dp[n-1],即从初始位置到达最后一个河流位置的最小跳跃次数。
本题解析所用的编程语言
C++
完整且正确的编程代码
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param rivers int整型vector * @return int整型 */ int min_jumps(vector<int>& rivers) { int n = rivers.size(); vector<int> dp(n, INT_MAX); dp[0] = 0; // 初始位置到达初始位置的最小跳跃次数为0 for (int i = 0; i < n; ++i) { // 遍历从当前位置i向前跳跃的所有可能距离j(0 <= j <= rivers[i]) for (int j = 1; j <= rivers[i] && i + j < n; ++j) { // 更新从初始位置到达位置i+j的最小跳跃次数 dp[i + j] = min(dp[i + j], dp[i] + 1); } } return dp[n - 1]; } };
您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!