2021/6/7 刷题笔记青蛙跳台阶问题与合并排序的数组

Posted 黑黑白白君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021/6/7 刷题笔记青蛙跳台阶问题与合并排序的数组相关的知识,希望对你有一定的参考价值。


剑指Offer10II青蛙跳台阶问题

【题目】

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

  • 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2 输出:2
示例 2:

输入:n = 7 输出:21
示例 3:

输入:n = 0 输出:1

提示:

  • 0 <= n <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

【其他方法】

设跳上 n 级台阶有 f(n) 种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1 级或 2 级台阶。

  • 当为 1 级台阶: 剩 n−1 个台阶,此情况共有 f(n−1) 种跳法;
  • 当为 2 级台阶: 剩 n−2 个台阶,此情况共有 f(n−2) 种跳法。

f(0)=f(1)=1。

class Solution:
    def numWays(self, n: int) -> int:
        a,b=1,1
        for i in range(n):
            a,b=a+b,a
        return b%1000000007
# 执行用时:48 ms, 在所有 Python3 提交中击败了14.13%的用户
# 内存消耗:14.8 MB, 在所有 Python3 提交中击败了51.36%的用户


合并排序的数组

【题目】

给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。

  • 初始化 A 和 B 的元素数量分别为 m 和 n。

示例:

输入: A = [1,2,3,0,0,0], m = 3 B = [2,5,6], n = 3

输出: [1,2,2,3,5,6]
说明:

  • A.length == n + m

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sorted-merge-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

【我的方法】

由于原地排序,且两个数组都有序,所以采用选择排序,从后往前插入两者中最大的数。

class Solution:
    def merge(self, A: List[int], m: int, B: List[int], n: int) -> None:
        """
        Do not return anything, modify A in-place instead.
        """
        k=n+m-1
        j=n-1
        i=m-1
        while(j>=0):
            if i<0:
                A[:k+1]=B[:j+1]
                return
            elif A[i]<=B[j]:
                A[k]=B[j]
                j-=1
            else:
                A[k]=A[i]
                i-=1
            k-=1
# 执行用时:32 ms, 在所有 Python3 提交中击败了94.71%的用户
# 内存消耗:14.9 MB, 在所有 Python3 提交中击败了63.79%的用户


【部分内容参考自】

以上是关于2021/6/7 刷题笔记青蛙跳台阶问题与合并排序的数组的主要内容,如果未能解决你的问题,请参考以下文章

leetcode刷题30.青蛙跳台阶——Java版

LeetCode刷题--点滴记录017

Python今日份刷题

刷题整理面试常见算法题集合

汉罗塔与青蛙跳台阶的递归实现(及扩展青蛙跳台阶)C语言从入门到入土(入门篇)(算法篇p2)

递归和非递归:青蛙跳台阶讲解