来自网易的一道看似简单的笔试题
题目:要求以线性时间复杂度实现斐波那契数列。
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 。。。。。。
众所周知的斐波那契实现方式为递归实现:
int feb1(int n) { t1++; if(n == 0 || n == 1) return 1; return feb1(n-1) + feb1(n-2); }
当n=25时, 迭代次数为242785 。
关于其复杂度的解释比较麻烦,详见http://www.cnblogs.com/python27/archive/2011/12/09/2282486.html
至今看了公开课视频后,才有所感悟,采用动态规划后,其复杂度直接下降到线性,迭代次数为49 。
int a[1000] = {0}; int feb2(int n) { t2++; if(n == 0 || n == 1) return 1; if(a[n] != 0) return a[n]; else a[n] = feb2(n-1) + feb2(n-2); return a[n]; }
相关推荐
本资源包聚焦于C语言实现的数据结构面试题,旨在帮助应聘者准备相关面试,提升对数据结构和算法的理解。 一、链表 链表是一种线性数据结构,与数组不同,它在内存中不是连续存储的。每个节点包含数据和指向下一个...
本资料“各大公司数据结构面试题集锦”汇聚了多个知名公司的面试题,涵盖了C和C++语言,旨在帮助求职者充分准备面试。 首先,我们来了解一下基础的数据结构类型: 1. 数组:是最基本的数据结构,它将元素存储在...
如斐波那契数列、背包问题、最长公共子序列等。 11. **字符串处理**:KMP算法、Rabin-Karp算法、Manacher算法等用于字符串匹配,Z函数、Boyer-Moore算法用于查找子串。 12. **位运算**:位操作在处理大数据和优化...
在编程和算法设计中,斐波那契数列也是一个常见的问题,经常出现在面试题和各种编程挑战中。标题"01_test_斐波那契数_"可能代表一个关于测试斐波那契数列计算的程序或者一个测试集。 斐波那契数列的定义如下:F(0) ...
在PHP的世界里,面试题是衡量开发者技能和经验的重要手段,尤其在算法这一领域,它直接反映了开发者的逻辑思维能力和问题解决能力。算法是计算机科学的基础,对于PHP开发者来说,理解并能熟练运用各种算法至关重要。...
对于寻找第k小的Fabonacci质数,可以先生成Fibonacci数列,再检查每个数是否为质数,直至找到第k个。 6. 101个硬币的重量问题: 利用无砝码天平,通过分组策略可以在两次称量后确定假币的重量。一种方法是将硬币...
更高效的算法可能涉及到字符串匹配、哈希或后缀数组等技术,能够以线性或接近线性的时间复杂度解决问题。 ### Fab数列与质数 **知识点**:结合数学序列与质数判断的编程题。 **解释**:此题要求找出特定条件下的...
以上内容只是对题目中涉及知识点的初步解析,实际的面试题可能需要更深入的解答,包括具体算法的实现细节、复杂度分析、最优解策略等。对于IT行业的求职者,扎实的数据结构和算法基础至关重要,这直接影响到他们在...
"常见算法笔试或面试题"这个主题涵盖了从基础到高级的各种算法问题,旨在帮助学习者和求职者提升解决问题的能力,为他们的职业生涯做好准备。以下是根据描述和标签所涉及的一些关键知识点的详细解析: 1. **排序...
"JAVA经典算法面试39题及答案"这个资源为求职者提供了宝贵的复习材料,涵盖了多种常见的算法问题,旨在帮助提升面试表现。 1. **排序算法**:在Java中,基础的排序算法如冒泡排序、插入排序、选择排序、快速排序、...
这个问题可以通过滑动窗口或动态规划等算法解决,复杂度通常是线性的。 5. **斐波那契数列与质数**: - 斐波那契数列(如1, 1, 2, 3, 5, 8, 13...)是递归定义的数列,每一项是前两项的和。 - 斐波那契质数是同时...
3. **递归与动态规划**:掌握递归的基本概念,如阶乘、斐波那契数列等,以及动态规划解决复杂问题的技巧,例如背包问题、最短路径问题。 4. **设计模式**:单例模式、工厂模式、观察者模式、装饰器模式等23种设计...
例如,二叉树的遍历(前序、中序、后序)、斐波那契数列等都可能作为面试题。 分治策略则是将大问题分解为小问题分别解决,再合并结果。在处理数组或列表时,例如快速排序、归并排序等都是分治思想的应用。例如,...
3. **递归与分治**:递归是解决复杂问题的一种强大工具,如斐波那契数列、汉诺塔等。分治策略是将大问题分解为小问题,如快速排序、归并排序就是典型的分治应用。 4. **图论与树**:树结构如二叉搜索树、AVL树、...
4. **动态规划**:背包问题、最长公共子序列、斐波那契数列等,理解动态规划的核心思想——状态转移方程。 5. **递归与回溯**:八皇后问题、N皇后问题、迷宫问题等,掌握递归的原理和回溯法在解决组合优化问题中的...
这“前端面试题之算法题集.zip”文件显然包含了一系列与前端面试相关的算法题目,旨在帮助求职者准备面试,同时也为开发者提升自己的算法能力提供了宝贵的资源。以下是根据标题、描述和标签提炼出的一些关键知识点:...
《Python解构Codility面试题:深度解析与实践》 在软件开发领域,尤其是在Python编程中,Codility是一项广受欢迎的在线评估平台,用于测试候选人的编程技能和算法理解。"codility_lessons_codility面试题python_...
《算法大全-面试题-数据结构.pdf》是一个深入探讨算法和数据结构的资源,对于程序员,尤其是准备面试的开发者来说,这是一个极其宝贵的学习材料。它涵盖了算法和数据结构的基础概念,以及在实际问题中的应用,旨在...
10. **计数与概率**:计数问题如组合、排列、鸽巢原理等,概率问题如蒙特卡洛方法,这些在某些特定的面试题中也会出现。 在准备前端面试时,不仅要理解和掌握这些算法,还需要通过实际编写代码来锻炼编程技巧。同时...
面试官可能要求你在给定的条件下推断程序的执行流程,例如:编写一段代码来实现Fibonacci数列,理解递归的工作原理和避免无限循环。 3. **复杂度分析**:面试者需要掌握时间复杂度和空间复杂度的概念,能够估算算法...