从零开始刷 LeetCode - 数组简单题常见技巧

最近在准备找工做,刷了 LeetCode 一百多题,还在入门阶段。在学习新的解题技巧的同时,准备写一个系列总结概括本身碰到过的刷题套路和思考,做为对本身学习过程的记录。前端

因为本身主要找前端开发,而且对 JS 比较熟悉,刷题语言采用 JS。git

目前笔记结构还比较混乱,会随着刷题进程不断完善。github

全系列文章也可访问这里数组

Arrays 数组

常须要遍历。下述方法也多适用于须要遍历的字符串有关问题。学习

for 循环

每循环一层时间复杂度便增长一个量级。 技巧:使用Hashmap,查找时间复杂度为 O(1),占用 O(n) 空间ui

例: (Two Sum) [leetcode.com/problems/tw…]spa

var twoSum = function (nums, target) {
  let record = new Map();

  for (const [index, num] of nums.entries()) {
    let compliment = target - num;

    // if found the pair
    if (record.has(compliment)) { // 若是找到了 compliment (说明以前存过),则返回两个坐标
      return [record.get(compliment), index];
    }
    record.set(num, index); // 若是没找到,则记录当前数的位置,以便以后查找
  }

};
复制代码

双指针

使用两个指针对数组进行遍历。 时间复杂度为 O(n)。 一般须要一个判断条件来决定如何移动指针。指针

常见条件:code

  • 升序排序数组,可根据目标值与当前值大小决定,小于目标值则左指针右移,反之则右指针左移。
  • 可能对目标值的影响

使用场景排序

  • 回文字符子串
  • 找一对数,尤为数组排好序后
    • 若是是找更多的数能够拆解成一个数加一对数
    • 若数组未排序,在不损失时间复杂度的状况下也能够考虑将数组排序
相关文章
相关标签/搜索