![3b6e636c5fa35cbc020a23dd1a34eb9f.png](https://img-blog.csdnimg.cn/img_convert/3b6e636c5fa35cbc020a23dd1a34eb9f.png)
LeetCode 数组类算法总结
数组作为算法面试中出现的高频数据结构。有很多经典的考点知识,比如排序问题,二分搜索等等。本篇文章主要介绍 LeetCode 中典型的数组类问题,主要介绍这类问题的一些常用解法:做好初始定义、基础算法思想应用、对撞指针、滑动窗口法等。
做好初始定义
做数组类算法问题的时候,我们常常需要定义一个变量,明确该变量的定义,并且在书写整个逻辑的时候,要不停的维护住这个变量的意义。也特别需要注意初始值和边界的问题。
283. 移动零
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
let len = nums.length
let j = 0
for (let i = 0; i < len; i++) {
if (nums[i]) {
nums[j++] = nums[i]
}
}
for (let i = j; i < len; i++) {
nums[i] = 0
}
return nums
};
27. 移除元素
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
let j = nums.length
let i = 0
while (i < j) {
// 遇到相等的就把这个元素丢到末尾去
if (nums[i] === val) {
nums[i] = nums[j-1]
// 同时数组长度-1
j--
} else {
i++
}
}
return i
};
26. 删除排序数组中的重复
知乎视频www.zhihu.com80. 删除排序数组中的重复 II
知乎视频www.zhihu.com运用基础算法思想
典型的排序算法思想、二分查找思想在解 LeetCode 题目时很有用。
75. 颜色分类
知乎视频www.zhihu.com215. 数组中的第K个最大元素
知乎视频www.zhihu.com88. 合并两个有序数组
知乎视频www.zhihu.com对撞指针
有一些 LeetCode 题目,我们可以采用对撞指针进行求解:指针 i 和 j 分别指向数组的第一个元素和最后一个元素,然后指针 i 不断向前, 指针 j 不断递减,直到 i = j(当然具体的逻辑操作根据题目的变化而变化)。
167. 两数之和 II - 输入有序数组
知乎视频www.zhihu.com125. 验证回文串
知乎视频www.zhihu.com345. 反转字符串中的元音字母
知乎视频www.zhihu.com11. 盛最多水的容器
知乎视频www.zhihu.com滑动窗口
一些题目用滑动窗口方法解题,可以将时间复杂度控制在 O(n) 级别,最重要的是定义好滑动窗口,明确它要表达的意思,当然边界和初始值非常重要。