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 刷题笔记青蛙跳台阶问题与合并排序的数组的主要内容,如果未能解决你的问题,请参考以下文章