6.旋转数组的最小数字
题目:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解析:
1)遍历数组
class Solution:
def minNumberInRotateArray(self,list01):
"""
查找旋转数组的最小数字
:param list01: 输入的数列
:return:数组中的最小数
"""
if len(list01)==0:
return 0
result=list01[0]
for num in list01:
if num<result:
result=num
return result
2)二分查找
二分查找的变形,旋转数组的首元素肯定不小于旋转数组的尾元素,找一个中间点,如果中间点比首元素大,说明最小数字在中间点后面,如果中间点比尾元素小,说明最小数字在中间点前面。然后循环。 但是在一次循环中,首元素小于尾元素,说明该数组是排序的,首元素就是最小数字,如果出现首元素、尾元素、中间值三者相等,则只能在此区域中顺序查找。
7.斐波那契数列
题目:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39
#1、1、2、3、5、8、13、21、34、……
class Solution:
def Fibonacci(self,n):
"""
斐波那契数列
:param n:计算第几次
:return:
"""
num1=0
num2=1
tar=0
for i in range(1,n+1):
num1=num2
num2=tar
tar=num1+num2
return tar
if __name__=="__main__":
m= Solution()
print(m.Fibonacci(10))
8.青蛙
题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
解析:
跳第n阶有两种情况,由倒数第二阶直接跳到第n阶,倒数第一阶直接跳到第n阶。
class Solution:
def jumpFloor(self,num):
"""
计算跳台阶
:param num: 跳到的数字
:return:
"""
if num==1:
return 1
elif num==2:
return 2
num1=1
num2=2
tar=num1+num2
for i in range(2,num-1):
num1=num2
num=tar
tar=num1+num2
return tar