【算法刷题】—7.9动态规划,游戏跳跃,分解质因数

简介: ✨今日算法三题1.使用最小花费爬楼梯2.跳跃游戏3.只有两个键的键盘

✨今日算法三题


1.使用最小花费爬楼梯

2.跳跃游戏

3.只有两个键的键盘


文章目录


1.使用最小花费爬楼梯


题目描述

思路详解


看到这道题,突然觉得和前缀和有些相似,如果我们用一个数组sum[i]来表示到达第i阶需要的花费,每次都取最小,那么到达第i阶的最小消费就是sum[i]。

注意,有个小细节,阶数与数组小标的相互对应要时刻注意。比如第i阶,数组小标为i-1哦。每当做算法题的时候都要考虑对应问题。

看到题中一次可以上一阶或者两阶,那么sum[i]=min(sum[i−1]+cost[i−1],dp[i−2]+cost[i−2])


代码与结果

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int n = cost.length;
        int prev = 0, curr = 0;
        for (int i = 2; i <= n; i++) {
            int next = Math.min(curr + cost[i - 1], prev + cost[i - 2]);
            prev = curr;
            curr = next;
        }
        return curr;
    }
}


跳跃游戏


题目描述

思路详解


这个题就比较有意思了,好像桌游大富翁,我还挺厉害的,哈哈哈哈,,,直接开干。

仔细看题可得知,数组中的值表示最大跳跃长度,那么我们遍历数组每次都保存当前位置可以到达的最大长度(当前位置下标+数组中的数值),如果有某一次保存的最大可到达长度大于数组长度就表示可以用几次跳跃到达最后。


代码与结果

public class Solution {
    public boolean canJump(int[] nums) {
        int n = nums.length;
        int rightmost = 0;
        for (int i = 0; i < n; ++i) {
            if (i <= rightmost) {
                rightmost = Math.max(rightmost, i + nums[i]);
                if (rightmost >= n - 1) {
                    return true;
                }
            }
        }
        return false;
    }
}


只有两个键的键盘


题目描述

思路详解


这个题就比较不容易了,这里采用分解质因数的方法。

设 f[i]表示打印出 ii个 A 的最少操作次数。由于我们只能使用「复制全部」和「粘贴」两种操作,那么要想得到 i 个 A,我们必须首先拥有 j 个 A,使用一次「复制全部」操作,再使用若干次「粘贴」操作得到 i 个A。

那么我们直接对n进行质因数分解,每次保存i表示复制全部次数,最后剩下的不能分解的表示粘贴次数。


代码与结果

class Solution {
    public int minSteps(int n) {
        int ans = 0;
        for (int i = 2; i * i <= n; ++i) {
            while (n % i == 0) {
                n /= i;
                ans += i;
            }
        }
        if (n > 1) {
            ans += n;
        }
        return ans;
    }
}

✨总结


今天的题都考察到了数学知识的运用,对于算法来说,数学也很重要。加油!!!

相关文章
|
1月前
|
算法 开发者 Python
惊呆了!Python算法设计与分析,分治法、贪心、动态规划...这些你都会了吗?不会?那还不快来学!
【7月更文挑战第10天】探索编程巅峰,算法至关重要。Python以其易读性成为学习算法的首选。分治法,如归并排序,将大问题拆解;贪心算法,如找零问题,每步求局部最优;动态规划,如斐波那契数列,利用子问题解。通过示例代码,理解并掌握这些算法,提升编程技能,面对挑战更加从容。动手实践,体验算法的神奇力量吧!
55 8
|
4天前
|
机器学习/深度学习 算法 Java
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
这篇文章介绍了基于贪婪技术思想的Prim算法和Dijkstra算法,包括它们的伪代码描述、Java源代码实现、时间效率分析,并展示了算法的测试用例结果,使读者对贪婪技术及其应用有了更深入的理解。
算法设计(动态规划应用实验报告)实现基于贪婪技术思想的Prim算法、Dijkstra算法
|
4天前
|
算法 Java 测试技术
算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
这篇文章介绍了基于动态规划法的三种算法:解决背包问题的递归和自底向上实现、Warshall算法和Floyd算法,并提供了它们的伪代码、Java源代码实现以及时间效率分析。
算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
|
10天前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
25 1
|
4天前
|
算法
互动游戏解决遇到问题之基于射线投射寻路算法的问题如何解决
互动游戏解决遇到问题之基于射线投射寻路算法的问题如何解决
|
5天前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
|
8天前
|
算法 Python
【python】python基于 Q-learning 算法的迷宫游戏(源码+论文)【独一无二】
【python】python基于 Q-learning 算法的迷宫游戏(源码+论文)【独一无二】
|
13天前
|
算法 Python
【Leetcode刷题Python】改进的算法,高效求一个数的因子
一个高效的Python函数用于找出一个整数的所有因子,通过仅遍历到该数平方根的范围来优化性能。
22 0
|
1月前
|
算法 Python
Python算法高手进阶指南:分治法、贪心算法、动态规划,掌握它们,算法难题迎刃而解!
【7月更文挑战第10天】探索Python算法的精华:分治法(如归并排序)、贪心策略(如找零钱问题)和动态规划(解复杂问题)。通过示例代码揭示它们如何优化问题解决,提升编程技能。掌握这些策略,攀登技术巅峰。
39 2
|
1月前
|
算法 程序员 Python
算法小白到大神的蜕变之路:Python分治法、贪心、动态规划,一步步带你走向算法巅峰!
【7月更文挑战第9天】探索算法之旅,以Python解锁编程高手之路。分治法如二分查找,将复杂问题拆解;贪心算法解决活动选择,每次选取局部最优;动态规划求斐波那契数列,避免重复计算,实现全局最优。每一步学习,都是编程能力的升华,助你应对复杂挑战,迈向算法大师!
29 1

热门文章

最新文章