从0开始学算法(主要是记录自己的刷题历程吧)

309 阅读1分钟

前言??

快毕业了,也面试了不少公司,面试题目大同小异,主要是算法题让我心力憔悴。本人专升本学渣一颗,专科学习的是c++(没咋用心学),来到期待已久的大学,课程跟科班落下2年,学习的还是java。 由于自己摸索入坑,过于注重框架,技术,忽略了算法。导致自己面试几乎碰到算法就挂。虽然算法题刷了不少。但是临时抱佛脚显然不行。虽然现在临近毕业,但是还是决定每天用1小时认真学习算法,加油!(自己给自己打气)

第一个题:一个究极简单,也是我面试创新工厂的面试题: 1.对于一个未知长度的单链表,如何获取他的中间节点?有几种方法?算法复杂度是多少? 这个题可以说是很简单了(第一天,我也不想太打击自己)

    首先,第一种:先遍历一遍单链表,得到长度L,在此基础上,从头再次遍历L/2次找到中间节点
    算法复杂度:O(L/2+L)=O(3L/2)
    
    第二种方法(我本人会第一种。。。。感觉都会)
    设计两个指针,A和B,B的遍历速度是A的两倍,同时从头开始遍历,
在B遍历完成时,A正好在中间
    算法复杂度:O(L/2)