算法
切勿盲目刷题:刷题前的知识积累
想要提高自己的算法,我觉得就是脚踏实地着多动手去刷题,多刷题。
但是,连常见的数据结构,如链表、树以及常见的算法思想,如递归、枚举、动态规划这些都没学过,那么,我不建议你盲目疯狂着去刷题**的。
先看完算法图解,然后开始看剑指offer(10天),之后复习计算机网络(3天),之后看源码(5天),然后边看资料边面试(12天)。做到了尚有一线生机,做不到容易完蛋,高三模式开启。
算法图解
二分查找
对于包含n个元素的列表,用二分查找最多需要log2n步,而简单查找最多需要n步。
仅当列表是有序的时候,二分查找才管用
javascript使用实现二分法
module.exports.binary_search = (arr, item) => {
let low = 0; //定义最小坐标
let height = arr.length - 1; //最大坐标
let mid; //中间坐标
let select; //选择项
while (low <= height) {
mid = Math.floor(low + height);
select = arr[mid];
if (select == item) {
return mid;
}
if (select < item) {
low = mid + 1;
}
if (select > item) {
height = mid - 1;
}
}
return null;
};
大O表示法
仅知道算法需要多长时间才能运行完毕还不够,还需知道运行时间如何随列表增长而增加。这正是大O表示法的用武之地。指出的是算法需要执行的操作数,指出了最糟糕情况下的运行时间。谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。
但是除最糟情况下的运行时间外,还应考虑平均情况的运行时间,这很重要。