9,斐波那契数列 6,旋转数组找最小 8青蛙跳台阶 JAVA实现

9,斐波那契数列

要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0),n<=39。

思路:菲波那切数列:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*),就是后一个数字是前两个数字的和。所以for循环应该从2开始遍历到n

public int FIBO(int n)
    {
        int a=1,b=a;
        int temp;
        if(n<=0)
            return 0;
        for(int i=2;i<n;i++)
        {
            temp=a;
            a=b;
            b=temp+b;
        }
        return b;
    }

 

 

6.旋转数组中的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 

1,

思路:就是对一个有序数列,从中间拦腰斩断,前后颠倒位置,让他整体没有顺序。从这样一组数列中找最小数就直接依次遍历,

  • 当前一个数字比后一个数字大,说明原来数列是递增的,而当前的两个数字一个是原数列尾巴一个是原数列头,所以这个头就是我们要的最小数字。
  • 当遍历之后发现前一个数字都比后一个数字小,则说明现在这个数列是递增的,最小值就是第一个元素
public int test1(int[] array)
    {
        if(array.length==0)
        {
            return 0;
        }
        for(int i=0;i<array.length-1;i++)
        {
        if(array[i]>array[i+1])
        {
            return array[i+1];
        }
        }
        return array[0];
        
        
    }

2,,

二分法

public int test18(int[] array)
    {
        if(array.length==0)
            return 0;
        int l=0,r=array.length-1,mid=0;
        while(l<r)
        {
            mid=(r+l)/2;
            if(array[mid]>array[r])
                l=mid+1;
            else
                r=mid;
            
        }
        return array[l];
    }

 

8.跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

 

思路:相当于是斐波那契数列的变式。关于为什么青蛙跳台阶可以认为是斐波那契数列,如下图显示,其中数字代表步数。

递推式: [公式]

 

 

 

public int test18(int n)
    {
        if(n<=0)
            return 0;
        if(n==0)
            return 1;
        int a=1,b=1,temp;
        for(int i=2;i<n;i++)
        {
            temp=a;
            a=b;
            b=temp+b;
        }
        return b;
        
        
    }

 

posted @ 2021-08-03 16:12  热心市民陆女士  阅读(47)  评论(0编辑  收藏  举报