数组相关算法题

150 阅读2分钟

一、数组相关的算法刷题记录

1. 🗡☞offer 59-I(困难)滑动窗口的最大值 题解 题解2

2. 🗡☞offer 66. 不使用除法构建乘机数组 题解

3. 🗡☞offer42. 连续子数组的最大和 题解

4. 🗡☞offer21. 调整数组顺序使得奇数位于偶数前面 题解

5. 🗡☞offer17. 打印从1到最大的n位数 题解

6. 数组中两数之和 三个数之和 N个数之和 题解

7. 🗡☞offer51 数组中的逆序对 题解

8. 🗡☞offer04. 二维数组中的查找 题解

1. 二分查找算法

二分查找伪代码

两种模型,left<right right=midle; left<=right right=midle-1; 如果给出的数组是有序的可以优先考虑是否可以用二分查找思想去做;

1. 35. 搜索插入搜索位置 (简单) 题解

2. 34. 查找target在排序数组中的开始位置和结束位置 题解

2. 数组快慢指针 双指针使用

  1. 暴力解法(不推荐)
  2. 快慢指针,通过一个快指针和一个慢指针在一个for循坏下完成两个for循坏的工作。快指针fastIndex,慢指针slowIndex。要求数组原地操作,优先考虑快慢指针

1. 27. 移除数组中为val的值 使用快慢指针 (简单) 题解

2. 26. 删除有序数组中重复的项 题解

3. 283. 原地移动数组中的零 题解

4. 844. 比较含退格的字符串 题解

5. 977. 非递减数组的平方 题解

3. 滑动窗口

题目 滑动窗口适合在题目要求连续的情况下使用。

  1. 确定滑动窗口内容;2. 确定滑动窗口起始位置以及移动;3. 确定滑动窗口结束位置以及移动;
  2. 也有滑动窗口+map求解方法;比如下面的76、904题。

滑动窗口的伪代码

初始化慢指针=0;
初始化 res;
  for 快指针 in 可迭代集合
    更新窗口内信息
    while 窗口内符合题意
      更新答案
      扩展或者缩小窗口大小
  return 结果res

1. 209. 数组中满足sum>=target的长度最小子数组;题解

2. 718. 最长公共子数组 题解

3. 76. 最小覆盖子串,给定字符串s,t,找出s中匹配t的最小字符串 题解

4. 904. 水果篮,找数组中的只含连续两个元素的最大子数组 题解

4. 螺旋数组

顺时针处理,一开始l=0,r=n-1,t=0,b=n-1;循坏过程中一步一步的向内收缩;

1. 59. 螺旋矩阵II 题解

2. 🗡☞offer 29. 顺时针打印矩阵 题解