美文网首页
算法套路总结-数组

算法套路总结-数组

作者: 李云龙_ | 来源:发表于2022-09-19 18:07 被阅读0次

1. 数组 - 做好初始定义

做数组类算法问题的时候,我们常常需要定义一个变量,明确该变量的定义,并且在书写整个逻辑的时候,要不停的维护住这个变量的意义。也特别需要注意初始值和边界的问题。

做数组类题目的通用步骤
  1. 先将 分区的定义 写在代码中
  2. 初始化变量的值时保证三个区间都是空区间
  3. 遍历时不停的维护 分区的定义
1. 移动零 (力扣 283)

题目 : https://leetcode.cn/leetbook/read/all-about-array/x9rh8e/

解法 (快慢指针法)

使用快慢指针, 快指针用来扫描, 慢指针用来指向可覆盖的位置。

慢指针指向当前已经处理好的序列的尾部, 快指针指向待处理序列的头部。快指针不断向右移动, 每次快指针指向非零数, 则将快慢指针对应的数交换, 同时慢指针右移。

注意到以下性质:

  1. 慢指针左边均为非零数;
  2. 快指针左边直到左指针处均为零。
  3. 快指针右边都是待处理数。
左边界 --------------- 慢指针 ----------------- 快指针 ---------------- 右边界
       保留的元素(非0)         不保留的元素 (0)           待处理的元素

因此每次交换, 都是将慢指针的零与快指针的非零数交换, 且非零数的相对顺序并未改变。

2. 移除元素 (力扣 27)

题目 : https://leetcode.cn/leetbook/read/all-about-array/x9p1iv/

解法一 (快慢指针法)

解法同 移动零, 只要把前等于 val 的值用后面不等于 val 的值覆盖就可以, 而不需要交换这两个值。有如下性质 :

  1. 只需要保证 左指针左边均为非 val 值即可
  2. 不用保证右指针左边到左指针都为 val 值
解法二 (左右指针法)
  1. 左指针找等于 val 的元素, 右指针找不等于 val 的元素
  2. 如果左指针的当前元素等于 val :
    1. 那么让右指针的元素覆盖左指针的元素
    2. 如果右指针的元素覆盖完了左指针的元素还是 val, 那么右指针继续往左移动
  3. 如果左指针的当前元素不等于 val, 那么左指针继续往右移动
3. 删除排序数组中的重复项 (力扣 26)

题目 : https://leetcode.cn/leetbook/read/all-about-array/x9a60t/

解法

如果快指针的值 和 快指针前面相邻的值不一样, 那么就用慢指针保存快指针的值

4. 删除排序数组中的重复项2 (力扣 80)

题目 : https://leetcode.cn/leetbook/read/all-about-array/x9nivs/

解法
  1. nums[fast] 表示待检查的第一个元素
  2. nums[slow − 1] 为所有应该被保留的元素的最后一个
  3. nums[slow − 2] 为所有被保留的元素的倒数第二个

因为本题要求相同元素最多出现两次而非一次, 所以需要检查上上个应该被保留的元素 nums[slow − 2] 是否和当前待检查元素 nums[fast] 相同, 如果不同, 那么执行 nums[slow] = nums[fast]; 保留元素。

相关文章

  • 算法套路总结-数组

    1. 数组 - 做好初始定义 做数组类算法问题的时候,我们常常需要定义一个变量,明确该变量的定义,并且在书写整个逻...

  • 【剑指offer-双指针】

    导读 算法 | 双指针套路总结 常用的双指针技巧 算法与数据结构基础 - 双指针 目录: 面试题04. 二维数组中...

  • 算法-数组算法总结

    数组类型总结 1 二分法 思路:前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分...

  • JavaScript数组去重算法实例

    本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写、遍历...

  • 排序算法

    一、排序算法总结 排序算法题目 排序算法快速排序堆排序归并排序 应用最小K个数(TopK问题)215.数组中的第K...

  • 『算法』之 初级排序算法总结

    本篇文章同时收录在我的个人博客:『算法』之 初级排序算法总结 选择排序 一种最简单的排序算法:首先,找到数组中最小...

  • 二分搜索怎么用?我和快手面试官进行了深度探讨

    读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 410.分割数组的最大值[htt...

  • 算法(二):分而治之

    算法篇的文章主要为对"图解算法"一书的记录与总结 分而治之 分而治之的例子 java实现 快速排序案例 对数组In...

  • 剑指offer4.二维数组中的查找

    题目 题目分析 算法-二维数组中的查找 比如一个二维数组是这样: 要查找数组7在不在数组内,根据前人总结出来的规律...

  • JavaScript常用数组算法总结

    数组去重 方法1: 利用数组的indexOf方法 方法2 利用hash表,可能会出现字符串和数字一样的话出错,如v...

网友评论

      本文标题:算法套路总结-数组

      本文链接:https://www.haomeiwen.com/subject/xasvortx.html