算法相关面试

104 阅读2分钟

1.算法的学习技巧

  • 从简单算法开始刷题练习
  • 多画图,理解过程之后,在开始用代码

2.算法简介

2.1 顺序查找简介

  • 顺序查找,是一种简单直观的搜索算法
  • 按照顺序逐个比较列表或数组中的元素,直到找到目标元素或者搜索完整个列表

image.png

2.1.1 应用场景

2.1.2 代码实现

def sequence_search(origin_list,target):
    """

    :param origin_list:被查找的数组或者列表
    :param target: 目标元素
    :return: 目标元素的索引
    """
    for index in range(len(origin_list)):
        if origin_list[index] == target:
            return index
        continue
    return -1

2.2 二分查找

2.2.1 二分查找简介

  • 二分查找是一种有序数组中查找元素的算法
  • 它将数组分成两部分,判断目标元素可能在哪一部分
  • 直到找到目标元素或者确定目标元素不存在于数组中

2.2.2 应用场景

image.png

2.2.3 二分查找思路

  • 确定搜索区间的左右边界,然后计算中间元素的下标。
  • 判断目标元素是否等于中间元素,如果相等则返回下标。
  • 如果不相等,则判断目标元素在左半边还是右半边,继续在该区间中查找。
  • 重复此过程直到找到目标元素或确定目标元素不存在于数组中。

2.2.4 代码实现

3.时间复杂度

  • 常量级:循环有限个次数,比如循环100次,这个的时间复杂度也是O(1)
  • 单个循环,不知道循环的次数,时间 复杂度就是:O(n),线性增长
  • 嵌套循环,时间复杂度就是:O(n平方)或者O(n*m)

总复杂度等于量级最大的那段代码的复杂度

image.png 多个规模求加法

  • 代码的复杂度由两个数据的规模决定的
  • m和n是表示两个数据规模,无法事先评估m和n谁的量级大,所以取加法

image.png 嵌套代码求乘积

  • 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 image.png

4.空间复杂度