每天一个面经系列--面经20:面试手撕代码三选二

    xiaoxiao2023-11-21  163

    两个线程分别打印26个英文字母的元音(a, e, i, o, u)和辅音(其他),按字母序输出。一条N个格子组成的直线道路,每次可以前进1格或2格;设计算法计算有多少种方式走到终点?实现一个能够生产不同类型手机(Android、iPhone)的工厂,考虑未来可能的扩展

    第一题并发相关。

    第二题算法相关:斐波那契数列。

    第一步:找出规律

    public class Solution { public int JumpFloor(int target) { if(target<=0) { return -1; }else if(target==1) { return 1; }else if(target==2) { return 2; }else { return JumpFloor(target-1)+JumpFloor(target-2); } } }

    上述递归代码之所以慢,是因为重复的计算太多,我们只要想办法避免重复的计算就可以。比如我们可以把已经得到的数列中间项保存起来,在下次需要计算的时候我们先排查一下,如果已经计算过就不用再重复计算了。这样的时间复杂度是O(n)。

    public class Solution { public int JumpFloor(int target) { int[] result = {0, 1, 2}; if(target < 3){ return result[target]; } int one = 1; int two = 2; int results = 0; for(int i =2; i < target; i++){ results = one + two; one = two; two = results; } return results; } }

     

    第三题设计模式相关: 

    最新回复(0)