而算法的美妙之处就在于,你通过不断的训练,能从纷杂的问题表面分析出实质性的规律,就如同在茫茫互联网海洋中,寻找那一段段神秘的代码。 今天的博客就写道这里了,老司机催我上车了。
专栏| 九章算法 题目描述 一只青蛙正在过河。河被分成了x段并且每一段都可能存在或不存在一个石头。这只青蛙可以跳至石头上,但不能跳进水里。 现有一个石头位置的升序列表,判断这只青蛙能否能够跳至最后一个石头,从而过河。最初青蛙在第一块石头上并且假定第一跳只能跳一段。 如果这只青蛙之前一次跳了k段,...
算法思路 青蛙跳可以使用动态规划算法来解决。我们可以定义一个布尔类型的数组dp,dp[i]表示青蛙从起始位置跳到第i块石头是否是可能的。 初始状态下,青蛙只有在第一块石头上才能起跳,所以dp[0]为true。对于其他的石头i(i>0),我们需要遍历之前的所有可能的起跳位置j(j<i),并检查是否存在一块石头k(k<j),使得...
其中, Ds 表示青蛙个体的调整矢量, Dmax表示青蛙个体允许改变的最大步长。如设Uw=[1 3 5 4 2],UB=[2 1 5 3 4],允许改变的最大步长Dmax =3,若rand=0.5 ,则U q(1) =1+min{int[0.5 × (2−1)],3}=1;U q(2) =3+max{int[0.5×(1−3)], −3}...
但其实,这种可以将一个问题拆解为多个重复子问题的算法只要我们掌握了其中的 “套路” ,便可以游刃有余的解决所有递归类问题。 下面我们就开始吧~ 一、青蛙跳台阶 我们首先以最简单的「青蛙跳」为例子来拆解递归问题 剑指Offer 10- II. 青蛙跳台阶问题【超级简单】https://leetcode-cn.com/problems/qing-wa-ti...
递归解法适用于问题规模较小且不要求高效率的情况;动态规划解法适用于问题规模较大且要求高效率的情况;数学公式解法适用于对数学公式理解较高且要求高效率的情况。 无论选择哪种解法,我们都可以通过合理的算法设计和优化来解决青蛙跳格问题,为实际应用提供有效的解决方案。
青蛙跳一格或者两格,n格跳法 fn = f(n-1)+f(n-2) 就是斐波那契数列
这种算法复杂度可以用2^0+2^1+2^2+...+2^4表示,即时间复杂度近似为O(2^N)(回忆一下高中数学的等比数列)。 而空间复杂度是调用栈的深度,从上面的图可以看出来,最大的栈深是n-1,即空间复杂度是O(n) 进阶解法(尾递归) 上面这种解法时间复杂度很高在于做了很多重复计算,从递归公式能看出来:f(n)=f...
这种算法的核心思想是不断使x与x+1相邻,且不破坏x+1与x+2,x+2与x+3...n-1与n的相邻.我们假设x+1,x+2,x+3...n已经依次相邻顺时针(因为青蛙是顺时针跳的)排列好了,下面要把x排在x+1的左边相邻位置.为此,我们要移出x与x+1(注意,是从x顺时针数到x+1这一段)之间的元素.这些元素...