【数据结构7】数组类算法摘抄笔记

LeetCode数组类算法解体思路:

做好初始定义

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

1. 移动零

/**
 * @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
};

LeetCode「视频题解」数组类算法系列:283. 移动零 - 知乎LeetCode「视频题解」数组类算法系列:283. 移动零https://www.zhihu.com/zvideo/1312510605584932864

2. 移除元素

/**
 * @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
};

LeetCode「视频题解」数组类算法系列:27. 移除元素 - 知乎LeetCode「视频题解」数组类算法系列:27. 移除元素https://www.zhihu.com/zvideo/13125128343797514243. 删除排序数组中的重复

LeetCode「视频题解」数组类算法系列:26. 删除排序数组中的重复项 - 知乎LeetCode「视频题解」数组类算法系列:26. 删除排序数组中的重复项https://www.zhihu.com/zvideo/13125223032181964804.删除排序数组中的重复 II

LeetCode「视频题解」数组类算法系列:80. 删除排序数组中的重复项 II - 知乎LeetCode「视频题解」数组类算法系列:80. 删除排序数组中的重复项 IIhttps://www.zhihu.com/zvideo/1312523008788549632

运用基础算法思想

典型的排序算法思想、二分查找思想在解 LeetCode 题目时很有用。

5.颜色分类

LeetCode「视频题解」数组类算法系列:75. 颜色分类 - 知乎LeetCode「视频题解」数组类算法系列:75. 颜色分类https://www.zhihu.com/zvideo/13125242791881932806.数组中的第K个最大元素

LeetCode「视频题解」数组类算法系列:215. 数组中的第K个最大元素 - 知乎LeetCode「视频题解」数组类算法系列:215. 数组中的第K个最大元素https://www.zhihu.com/zvideo/1311122063432355840五分钟入门堆排序 - 知乎五分钟入门堆排序https://www.zhihu.com/zvideo/13119405170234408967.合并两个有序数组

LeetCode「视频题解」数组类算法系列:88. 合并两个有序数组 - 知乎LeetCode「视频题解」数组类算法系列:88. 合并两个有序数组https://www.zhihu.com/zvideo/1312202182067036160

对撞指针

有一些 LeetCode 题目,我们可以采用对撞指针进行求解:指针 i 和 j 分别指向数组的第一个元素和最后一个元素,然后指针 i 不断向前, 指针 j 不断递减,直到 i = j(当然具体的逻辑操作根据题目的变化而变化)。

8.两数之和 II - 输入有序数组

LeetCode「视频题解」数组类算法系列:167. 两数之和II 输入有序数组 - 知乎LeetCode「视频题解」数组类算法系列:167. 两数之和II 输入有序数组https://www.zhihu.com/zvideo/13125485189520547849.验证回文串

LeetCode「视频题解」数组类算法系列:125. 验证回文串 - 知乎LeetCode「视频题解」数组类算法系列:125. 验证回文串https://www.zhihu.com/zvideo/131260794312496742410.反转字符串中的元音字母

LeetCode「视频题解」数组类算法系列:345. 反转字符串中的元音字母 - 知乎LeetCode「视频题解」数组类算法系列:345. 反转字符串中的元音字母https://www.zhihu.com/zvideo/131290678863970713611.盛最多水的容器

LeetCode「视频题解」数组类算法系列:11. 盛最多水的容器 - 知乎LeetCode「视频题解」数组类算法系列:11. 盛最多水的容器https://www.zhihu.com/zvideo/1313270613348175872

滑动窗口

一些题目用滑动窗口方法解题,可以将时间复杂度控制在 O(n) 级别,最重要的是定义好滑动窗口,明确它要表达的意思,当然边界和初始值非常重要。

12.长度最小的子数组

LeetCode「视频题解」数组类算法系列:209. 长度最小的子数组 - 知乎LeetCode「视频题解」数组类算法系列:209. 长度最小的子数组https://www.zhihu.com/zvideo/1313538665231290368

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值