算法入门即翻车

150 阅读1分钟

算法

切勿盲目刷题:刷题前的知识积累

想要提高自己的算法,我觉得就是脚踏实地着多动手去刷题,多刷题。

但是,连常见的数据结构,如链表、树以及常见的算法思想,如递归、枚举、动态规划这些都没学过,那么,我不建议你盲目疯狂着去刷题**的。

先看完算法图解,然后开始看剑指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表示法的用武之地。指出的是算法需要执行的操作数,指出了最糟糕情况下的运行时间。谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。

但是除最糟情况下的运行时间外,还应考虑平均情况的运行时间,这很重要。