【玩转算法】数组

1. 如何写出正确的程序?

  1. 明确变量的含义
  2. 循环不变量
  3. 小数据量测试
  4. 大数据量测试
  5. 重点:是否能够耐心、快速、准确地找到程序中的Bug并对此修改,是技术人员的核心竞争力。

2. 数组中的常见问题

  1. 排序:选择排序、插入排序、归并排序、快速排序
  2. 查找:二分查找法
  3. 数据结构:栈、队列、堆

3. 数组优点

  1. 构建非常简单
  2. 能在 O(1) 的时间里根据数组的下标(index)查询某个元素

4. 数组缺点

  1. 构建时必须分配一段连续的空间
  2. 查询某个元素是否存在时需要遍历整个数组,耗费 O(n) 的时间(其中,n 是元素的个数)
  3. 删除和添加某个元素时,同样需要耗费 O(n) 的时间

5. 注意事项

  1. 当你在考虑是否应当采用数组去辅助你的算法时,请务必考虑它的优缺点,看看它的缺点是否会阻碍你的算法复杂度以及空间复杂度。
  2. 改变变量定义,依然可以写出正确的算法,此时要细致地检查边界值和比较运算符

6. 对于去重等需要有删除操作的题目,需要和面试官明确

  1. 如何定义删除?从数组中去除?还是放在数组末尾?
  2. 剩余元素的排列是否要保证原有的相对顺序?
  3. 是否有空间复杂度的要求? 如O(1)

7. 判断是否为回文字符串,需要和面试官明确

  1. 空字符串如何看?
  2. 字符的定义?
  3. 大小写问题

8. 关于字符集的问题,需要和面试官明确

  1. 字符集范围?只有字母?数字+字母?还是ASCII?
  2. 大小写是否敏感?
  3. 没有解返回什么?
  4. 若有多个解怎么办?返回多个的顺序?
  5. “包含”是什么意思,需要限定数量吗?

9. 经典例题之字符串排序、去重

  1. LeetCode 第 283 题:移动零
  2. LeetCode 第 27 题:移除元素
  3. LeetCode 第 26 题: 删除排序数组中的重复项
  4. LeetCode 第 80 题:删除排序数组中的重复项 II

10. 经典例题之三路快排partition思路的应用

  1. LeetCode 第 75 题 : 颜色分类
  2. LeetCode 第 88 题 :合并两个有序数组
  3. LeetCode 第 215 题:数组中的第K个最大元素

11. 经典例题之双索引-对撞指针

  1. LeetCode 第 167 题 :两数之和 II - 输入有序数组
  2. LeetCode 第 125 题 :验证回文串
  3. LeetCode 第 344 题 :反转字符串
  4. LeetCode 第 345 题 : 反转字符串中的元音字母
  5. LeetCode 第 11 题 :盛最多水的容器

12. 经典例题之双索引-滑动窗口

  1. LeetCode 第 209 题:长度最小的子数组
  2. LeetCode 第 3 题:无重复字符的最长子串
  3. LeetCode 第 438 题:找到字符串中所有字母异位词
  4. LeetCode 第 76 题:最小覆盖子串
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值