JavaScript:数组---双指针法

news2024/11/15 21:03:50

文章目录

  • 双指针法
    • 27.移除元素
      • 为什么返回值是整数,但输出的答案是数组?
      • 双指针法
    • 977.有序数组的平方
      • 暴力法:先平方再排序
      • 双指针法
    • 总结双指针

双指针法

27.移除元素

为什么返回值是整数,但输出的答案是数组?

[图片]

双指针法

原地修改
[图片]

慢指针只管索引,0,1,2,3
快指针只找适合的数据元素,找到了就给慢指针对应索引元素

/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    // 快指针flast(i:遍历所有数组) 慢指针slow
    // 快指针找符合条件的值给慢指针相应索引值
    // 不等于val: 把当前的nums[i] 给 慢指针,快指针慢指针都前进一步
    // 等于val时:慢指针不要这个当前nums值,也不前进,快指针继续往前找val
    let slow = 0
    for(let i = 0; i < nums.length; i++) {
        if (nums[i] != val) {
            nums[slow++] = nums[i]
        }
    }
    return slow
};

977.有序数组的平方

暴力法:先平方再排序

双指针法

数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。
此时可以考虑双指针法了,i指向起始位置,j指向终止位置。

最大值就是数组两端,我们可以用两个快指针i,j(注意:i<=j)分别指向数组前后,谁大谁先给慢指针,然后向中间移动
慢指针指向最后一个,收到一个值就往前移动

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortedSquares = function(nums) {
    let slow = nums.length - 1
    let res = []
    let i = 0, j = nums.length - 1
    while(i<=j) {
        if (nums[i] * nums[i] <= nums[j] * nums[j]) {
            res[slow] = nums[j] * nums[j]
            j--
            slow--
        } else {
            res[slow] = nums[i] * nums[i]
            i++
            slow--
        }
    }
    return res
};

总结双指针

双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

定义快慢指针

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里工作7年,肝到P8就剩这份学习笔记了,已助朋友拿到20个Offer

在阿里工作了7年&#xff0c;工作压力大&#xff0c;节奏快&#xff0c;但是从技术上确实得到了成长&#xff0c;尤其是当你维护与大促相关的系统的时候&#xff0c;熬到P7也费了不少心思&#xff0c;小编也是个爱学习的人&#xff0c;把这几年的工作经验整理成了一份完整的笔记…

3.13 结构体嵌套、大小及位域

目录 结构体嵌套结构体 结构体的大小 位域 结构体嵌套结构体 含义 结构体中的成员可以是另一个结构体 语法 struct 结构体名 { struct 结构体名 成员名&#xff1b; }; 结构体中共同的变量可以单独放出来&#xff0c;单独封装一个结构体 结构体的大小 字节对齐 含义 …

微服务篇:开始从头到尾搭建第一个微服务(小白)

微服务篇 我的一个微服务 手把手写微服务项目&#xff0c;从现在开始 文章目录 微服务篇环境搭建开发工具开发环境 一、创建项目&#xff1a;创建gitee链接1、登录 gitee 创建仓库2、 给项目起一个名字&#xff08;本地名字要跟远端一致哦&#xff09; panda3、打开IDEA创建项…

19. Unity - 2D游戏开发小记02 --- 伪透视图、2D物体碰撞、瓦片地图碰撞、素材缩放平铺

1. 伪视图 在2D游戏开发当中,当角色移动时,会发生物体与物体之间的前后遮挡。2D视图中的前后关系是由 Y 轴决定,y 值越小物体越靠前。unity的渲染应开启根据 y 值的大小进行渲染才能保证正确的遮挡效果,在菜单栏Editor–>project setting --> Graphic中按照下图方式…

MySQL之Doublewrite Buffer详解

前言 本文已收录在MySQL性能优化原理实战专栏&#xff0c;点击此处浏览更多优质内容。 上一篇文章MySQL之Adaptive Hash Index详解我们学习了InnoDB Adaptive Hash Index自适应哈希索引的工作原理。其本质是将频繁访问数据页的索引键值以“Key”放在缓存中&#xff0c;“Value”…

【微机原理】汇编指令之传送指令

目录 一、传送类指令 1.MOV 传送指令 2.XCHG 传送指令 二、LEA 有效地址传送指令 三.堆栈操作指令 &#xff08;1&#xff09;入栈指令&#xff1a;PUSH &#xff08;2&#xff09;出栈指令&#xff1a;POP 四、输入输出指令 &#xff08;1&#xff09;IN 输入指令 &#xff08…

nginx部署本地启动vue项目

需求&#xff1a;就是想在本地不运行vue项目&#xff0c;可以直接访问到打包后的vue项目 1.安装nginx nginx: download&#xff0c;这里我安装的1.12.2稳定版本 2.下载完直接得到一个压缩包&#xff0c;直接把它解压到一个目录 &#xff01;&#xff01;&#xff01;&#x…

CSI指纹预处理(中值、均值、Hampel、维纳滤波、状态统计滤波器)

目录 前言 1、箱线法 2、中值滤波器 3、均值滤波器 4、Hampel滤波器 5、维纳滤波 6、状态统计滤波器 前言 因为设备、温度和实验室物品摆设等因素的影响&#xff0c;未经处理的CSI数据不能直接使用&#xff0c;需要对数据进行异常值处理以保证数据的稳定性&#xff0c;…

力扣刷题2023-05-04-1——题目:2614. 对角线上的质数

题目&#xff1a; 给你一个下标从 0 开始的二维整数数组 nums 。 返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数&#xff0c;返回 0 。 注意&#xff1a; 如果某个整数大于 1 &#xff0c;且不存在除 1 和自身之外的正整数因子&#xff0c;…

【前端】1、flex 布局

flex 布局目录 一、flex container 和 flex items二、用在 flex container 上的 CSS 属性(1) flex-direction(2) justify-content(3) align-items 三、用在 flex items 上的 CSS 属性 一、flex container 和 flex items &#x1f384; 1、开启了 Flex 布局的元素叫 flex cont…

系统分析师---系统规划高频错题

系统规划---成本效益分析 评价信息系统经济效益常用的方法主要有成本效益分析法&#xff0c;投入产出分析法和价值工程方法。盈亏平衡法常用于销售定价&#xff1b; 可行性分析 系统规划是信息系统生命周期的第一个阶段&#xff0c;其任务是对企业的环境、目标以及现有系统的…

CAN总线(HALL库使用)

目录 1.CAN总线介绍 2.STM32中CAN总线配置 3.HALL库实验 1.CAN总线介绍 1.闭环特点&#xff1a;速度快&#xff0c;距离短&#xff08;40m&#xff09; 2.开环特点&#xff1a;速度慢&#xff0c;距离长&#xff08;1000m&#xff09; 2.STM32中CAN总线配置 stm32的can总线分…

体验 gpt4free

体验 gpt4free 什么是 gpt4free安装 ffmpeg启动 gpt4free访问 gpt4free gui其他 什么是 gpt4free GPT4Free 是一个由 xtekky 创建的基于 OpenAI GPT-4 和 GPT-3.5 的 API。它可以向用户提供类似于 OpenAI GPT-3 的功能&#xff0c;如文本生成、问答、翻译等。 GPT4Free 与 Ope…

2023前端面试上岸手册——VUE部分

目录 Vue 的基本原理双向数据绑定的原理MVVM、MVC、MVP 的区别slot 是什么&#xff1f;有什么作用&#xff1f;原理是什么&#xff1f;\$nextTick 原理及作用Vue 单页应用与多页应用的区别Vue 中封装的数组方法有哪些&#xff0c;其如何实现页面更新Vue data 中某一个属性的值发…

详解:搭建常见问题(FAQ)的步骤?

许多的Web用户都更加偏向于可信赖的FAQ页面&#xff0c;以此作为快速查找更多信息的方法。因为用户时间的紧缺&#xff0c;并且想知道产品的功能和能够提供的服务。构造精巧的FAQ页面是提供人们寻求信息的绝妙方法&#xff0c;而且还可以提供更多的信息。这就是为什么FAQ页面对…

1. C++面向过程

一、C简介 1.1 C的产生及其特点 从C语言发展演变而来&#xff0c;解决了C语言中存在的一些问题&#xff0c;并增加了对面向对象程序设计方法的支持 与其他高级语言相比&#xff0c;C语言可以直接访问物理地址&#xff1b;与汇编相比它具有良好的可读性和可移植性 C于1980年由…

【软考中级】2022下半年软件设计师案例分析题级答案

试题一(共15分) 阅读下列说明和图&#xff0c;回答问题1至问题4&#xff0c;将解答填入答题纸的对应栏内。 【说明】 随着新能源车数量的迅猛增长&#xff0c;全国各地电动汽车配套充电桩急速增长&#xff0c;同时 也带来了充电桩计量准确性的问题。充电桩都需要配备相应的…

RabbitMQ-保证消息可靠性

RabbitMQ-保证消息可靠性 1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback 1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化 1.3.消费者消息确认1.3.1.演示none模式1.3.2.演示auto模式 1.4.消费失败重试机制1.…

API接口的应用

一、API接口的应用 API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;接口在现代计算机科学中是一个非常重要的概念。API接口允许不同的应用程序、设备和服务进行交流、互操作和数据共享。下面我们将针对API接口的应用方向和场景进行…

计算机网络笔记:计算机网络体系结构(OSI七层模型、TCP/IP五层协议)

计算机网络体系结构 计算机网络是一个复杂的、具有综合性技术的系统&#xff0c;它由计算机系统、通信处理机、通信线路和通信设备、操作系统以及网络协议等组成。为了更好地描述计算机网络结构&#xff0c;使计算机网络系统有条不紊地处理工作&#xff0c;需要定义一种较好的…