数据结构与算法系列 -- 算法题中各种边界情况和复杂度的优化

240 阅读2分钟

做算法题之前要先列出所有的边界情况再考虑核心解法,显然,能囊括所有情况的核心解法是才是解决算法题的关键,另外算法的时间复杂度和空间复杂度的优化才是进一步的进阶

算法题中各种边界情况

这个问题需要不断的积累,而且边界情况思考的角度还要看问题是什么类型,这里只是做一些笔记做积累。最后的做题习惯是:开始确定核心解法前先在草稿纸上列出所有的情况

  • 字符串为空
  • 数组为空

数字方面

  • 数字为0
  • 数字为负数

具体例子

  • 315转为"三百一十五":需要考虑到 50036和50005的情况
  • 回文串:需要考虑"cac"和"acca"和"ccc"和"dddd"等多种可能
  • ["flower","flow","flight"]返回最长公共前缀"fl":需要考虑到数组只有一项的情况,退出条件是其中某一项读到undefined
  • 奇偶情况的考虑

时间复杂度的优化

  • 哈希表查找代替数组查找(O(1)>O(n))
  • 二分查找代替数组查找(O(logn)>O(n))

空间复杂度的优化

  • 变量替换代替另外建数组/栈(O(1)>O(n))
  • 对于积累结果求最值的:先维护一个max值,每次计算得到的结果都与max值进行比较(大则替换max值),这样就不用另外建一个数组然后再找最大值(O(1)>O(n))

综合考虑

有时时间复杂度的优化相对着的空间复杂度的损耗,同理空间复杂度的优化相对着的时间复杂度的损耗,所以要视具体问题具体分析