数据结构与算法(六)

78 阅读1分钟

一、剑指 Offer 10- I 斐波那契数列

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:

F(0) = 0,   F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2 输出:1 示例 2:

输入:n = 5 输出:5  

提示:

0 <= n <= 100

class Solution {
    public int fib(int n) {
        int f0 = 0;
        int f1 = 1
        int f2;
        for(int i = 2; i < n; i++){
            f2 = f(i - 2) + f(i - 1);
            f1 = f(i - 1);
            f0 = f(i);
        }
        
    }
}

二、剑指 Offer 40 最小的k个数(直接排序实现)

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。

示例 1:

输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1] 示例 2:

输入:arr = [0,1,2,1], k = 1 输出:[0]  

限制:

0 <= k <= arr.length <= 10000 0 <= arr[i] <= 10000

class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {    
        int[] vec = new int[k];
        Arrays.sort(arr);
        for (int i = 0; i < k; ++i) {
            vec[i] = arr[i];
        }
        return vec;
    }
}