剑指offer-python语言练习(二)

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值