【5-10】剑指offer

来源:互联网 发布:昆医教务网络管理系统 编辑:程序博客网 时间:2024/06/06 04:19

6. 题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}{1,2,3,4,5}的一个旋转,该数组的最小值为1
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0

 

class Solution

{

public:

    int minNumberInRotateArray(vector<int> rotateArray)

{

if(rotateArray.size() == 0)

return -1;

        vector<int>::iterator ite = rotateArray.begin();

for(; ite != rotateArray.end(); ite++)

{

if(*ite < *(ite - 1))

return *ite;

else

continue;

}

return -1;

}

};

 

7. 题目描述

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

n<=39

#include <iostream>

#include <vector>

using namespace std;

 

class Solution {

public:

    int Fibonacci(int n) {

        //n==0,则返回0

if(n == 0)

            return 0;

//n==12,则返回1

        if(n<=2)

            return 1;

//n>=3,则迭代求斐波拉契数列

        int *array = new int[n+1];

        array[0] = 0;

        array[1] = 1;

array[2] = 1;

        

        int i = 3;

        while(i <= n)

        {

            array[i] = array[i-1] + array[i-2];

            i++;

        }

        

        int temp = array[i-1];

        delete [] array;

        array = NULL;

        return temp;

    }

};

 

int main()

{

Solution s;

cout<<s.Fibonacci(10)<<endl;

return 0;

}

 

8. 题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法

 

#include <iostream>

#include <vector>

using namespace std;

 

class Solution {

public:

    int jumpFloor(int number) {

 

if(number == 0)

return 0;

if(number == 1)

return 1;

if(number == 2)

return 2;

 

int *array = new int[number];

array[0] = 1;

array[1] = 2;

int i = 2;

while(i < number)

{

array[i] = array[i-1] + array[i - 2];

i++;

}

int temp = array[i - 1];

delete [] array;

array = NULL;

 

return temp;

    }

};

 

int main()

{

Solution s;

cout<<s.jumpFloor(10)<<endl;

 

getchar();

getchar();

return 0;

}

 

9. 题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    跳发为:F(n) = 2^(n-1)

 

class Solution {

public:

    int jumpFloorII(int number) {

        if(number == 0)

            return 0;

        if(number == 1)

            return 1;

        

        int temp = 1;

        while(number>1)

    {

            temp *= 2;

            number--;

        }

        return temp;

    }

};

 

 

10. 题目描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

分析:f(n) = f(n-1)+f(n-2); f(1) = 1; f(2) = 2;

 

class Solution {

public:

    int rectCover(int number) {

        

        if(number == 0)

            return 0;

        if(number == 1)

            return 1;

        if(number == 2)

            return 2;

        

        int first = 1;

        int second = 2;

        int add = 0;

        while(number >= 3)

        {

            add = first + second;

            first = second;

            second = add;

            number--;

        }

        

        return add;

    }

};

0 0
原创粉丝点击