前端算法笔记-数组的应用

本文是关于前端算法的学习笔记,主要探讨了数组问题的解决策略,如利用Map解决两数之和问题,以及如何运用双指针法高效地合并有序数组和解决三数求和问题。通过剑指offer的题目实例,阐述了双指针法在求和、比大小类数组题目中的重要性,并强调了数组排序作为应用前提的重要性。
摘要由CSDN通过智能技术生成

前言

准备根据修言老师的小册子结合leetcode上剑指offer的数组题学习这一部分。

 

Map的妙用

真题描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

emmm首先这道题我做过,虽然第一反应肯定是两层循环。但是仔细一想,可以用哈希表。

剑指offer原题 和这题太一样。给的是一个递增排序,所以考点就变成了二分或者双指针(下面会讲到)。

这里修言老师语:大家以后做算法题的时候,要有这样的一种本能:当发现自己的代码里有两层循环时,先反思一下,能不能用空间换时间,把它优化成一层循环。

大家记住一个结论:几乎所有的求和问题,都可以转化为求差问题

 

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
const twoSum = function(nums, target) {
    // 这里我用对象来模拟 map 的能力
    const diffs = {}
    // 缓存数组长度
    const len = nums.length
    // 遍历数组
    for(let i=0;i<len;i++) {
        // 判断当前值对应的 target 差值是否存在(是否已遍历过)
        if(diffs[target-nums[i]]!==undefined) {
            // 若有对应差值,那么答案get!
            return [diffs[target - nums[i]], i]
        }
        // 若没有对应差值,则记录当前值
        diffs[nums[i]]=i
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值