作者简介:大家好,我是未央;
博客首页:未央.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位开始不同,前面的都是公共前缀。如果遍历结束都相同,最长公共前缀就是第一个字符串。
图示说明:
代码解析: