美文网首页
Java 面试系列:算法常用面试题汇总

Java 面试系列:算法常用面试题汇总

作者: you的日常 | 来源:发表于2020-12-30 10:07 被阅读0次

    1.说一下什么是二分法?使用二分法时需要注意什么?如何用代码实现?

    二分法查找(Binary Search)也称折半查找,是指当每次查询时,将数据分为前后两部分,再用中值和待搜索的值进行比较,如果搜索的值大于中值,则使用同样的方式(二分法)向后搜索,反之则向前搜索,直到搜索结束为止。

    二分法使用的时候需要注意:二分法只适用于有序的数据,也就是说,数据必须是从小到大,或是从大到小排序的。

    public class Lesson7_4 {
        public static void main(String[] args) {
            // 二分法查找
            int[] binaryNums = {1, 6, 15, 18, 27, 50};
            int findValue = 27;
            int binaryResult = binarySearch(binaryNums, 0, binaryNums.length - 1, findValue);
            System.out.println("元素第一次出现的位置(从0开始):" + binaryResult);
        }
        /**
         * 二分查找,返回该值第一次出现的位置(下标从 0 开始)
         * @param nums      查询数组
         * @param start     开始下标
         * @param end       结束下标
         * @param findValue 要查找的值
         * @return int
         */
        private static int binarySearch(int[] nums, int start, int end, int findValue) {
            if (start <= end) {
                // 中间位置
                int middle = (start + end) / 2;
                // 中间的值
                int middleValue = nums[middle];
                if (findValue == middleValue) {
                    // 等于中值直接返回
                    return middle;
                } else if (findValue < middleValue) {
                    // 小于中值,在中值之前的数据中查找
                    return binarySearch(nums, start, middle - 1, findValue);
                } else {
                    // 大于中值,在中值之后的数据中查找
                    return binarySearch(nums, middle + 1, end, findValue);
                }
            }
            return -1;
        }
    }
    
    

    执行结果如下:

    元素第一次出现的位置(从0开始):4

    2.什么是斐波那契数列?用代码如何实现?

    斐波那契数列(Fibonacci Sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711...... 在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。

    斐波那契数列之所以又称黄金分割数列,是因为随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的数值 0.6180339887......

    斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711......

    斐波那契数列的特征:第三项开始(含第三项)它的值等于前两项之和。

    斐波那契数列代码实现示例,如下所示:

    public class Lesson7_4 {
        public static void main(String[] args) {
            // 斐波那契数列
            int fibonacciIndex = 7;
            int fibonacciResult = fibonacci(fibonacciIndex);
            System.out.println("下标(从0开始)" + fibonacciIndex + "的值为:" + fibonacciResult);
        }
        /**
         * 斐波那契数列
         * @param index 斐波那契数列的下标(从0开始)
         * @return int
         */
        private static int fibonacci(int index) {
            if (index == 0 || index == 1) {
                return index;
            } else {
                return fibonacci(index - 1) + fibonacci(index - 2);
            }
        }
    }
    
    

    执行结果如下:

    下标(从0开始)7的值为:13

    3.一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?请使用代码实现。

    相关文章

      网友评论

          本文标题:Java 面试系列:算法常用面试题汇总

          本文链接:https://www.haomeiwen.com/subject/mrvebktx.html