【牛客面试必刷TOP101】Day10.BM62 斐波那契数列和 BM84 最长公共前缀

作者简介:大家好,我是未央;

博客首页:未央.303

系列专栏:牛客面试必刷TOP101

每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!!

文章目录

前言

一、斐波那契数列

题目描述

题目解析

二、最长公共前缀

题目描述

题目解析

总结



前言

一、斐波那契数列

题目描述

描述:
大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。

斐波那契数列是一个满足

fib(x)=1;x=1,2

fib(x)=fib(x−1)+fib(x−2)​;x>2​ 的数列


数据范围:1≤n≤40

要求:空间复杂度 O(1),时间复杂度O(n) ,本题也有时间复杂度O(logn) 的解法;


输入描述:

一个正整数n;

返回值描述:

输出一个正整数;


示例1:


示例2:


示例3:


题目解析

解题思路:
常见递归方法的例子;

递归 题目分析,斐波那契数列公式为:f[n] = f[n-1] + f[n-2], 初始值f[0]=0, f[1]=1,目标求f[n];


代码解析:

二、最长公共前缀

题目描述

描述:
给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。


数据范围: 0≤n≤5000, 0≤len(strsi​)≤5000;

进阶:空间复杂度 O(1),时间复杂度 O(n∗len)


示例1:


示例2:


题目解析

解题思路:
既然是公共前缀,那我们可以用一个字符串与其他字符串进行比较,从第一个字符开始,逐位比较,找到最长公共子串。


解题步骤:

  • step 1:首先考虑处理处理数组为空的特殊情况。
  • step 2:因为最长公共前缀的长度不会超过任何一个字符串的长度,因此我们逐位就以第一个字符串为标杆,遍历第一个字符串的所有位置,依次取出字符。
  • step 3:遍历数组中后续字符串,依次比较其他字符串中相应位置是否为刚刚取出的字符,如果是,循环继续,继续查找;如果不是或者长度不足,说明从第i位开始不同,前面的都是公共前缀。如果遍历结束都相同,最长公共前缀就是第一个字符串。

图示说明:


代码解析:


总结

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值