重生之我在摸鱼学算法
这里贴上我刷过的题目,后续会慢慢补充:力扣题目整理,方便回顾
每天完成一道题目, 或者是学习够半个小时停止。分享|如何科学刷题?
问:力扣是如何测试题目的?为什么没有main
函数?
简单来说,力扣的评测机内部有main
函数,里面会调用你写的函数(方法),传入相应的测试数据,并对比函数(方法)的返回值和正确答案是否一致。如果对于所有的测试数据,返回值都与正确答案一致,则判定通过。
问:作为一名程序员,日常没有用算法解决问题,直接使用封装好的,是不是我们工作中的问题还没有达到需要算法的程度?
如果学过算法,我们就回知道内置的排序函数的时间复杂度是O(nlogn);而如果给定的数据是固定位数的整数,那么我们就可以用效率更高的“基数排序”来做,将时间复杂度降为O(nk)其中k为位数。当数据体量很大的时候,节省出来的运行时间就能创造较大的价值。
问:什么是尾递归?尾递归为什么可以优化?
尾递归:求和操作是在“递”的过程中执行的,“归”的过程只是需要层层返回。尾递归为啥能优化?
我的理解就是,尾递归是自顶向下的递归方式,在“递”的时候执行需要的操作。
迭代(iteration):是一种重复执行某个任务的控制结构,在迭代过程中,程序会在满足一定的条件下重复执行某段代码,知道这个条件不再满足。
递归(recursion):是一种算法策略,通过函数调用自身来解决问题,本质上是“将问题分解为更小的子问题”。主要包含两个阶段:
- 1 递:程序不断深入的调用自身,通常是传入更小或者更简化的参数,直到到达终止条件
- 2 归:触发终止条件后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。