JavaScript:数组---双指针法

news/2024/11/24 1:36:15/

文章目录

  • 双指针法
    • 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值,也不前进,快指针继续往前找vallet slow = 0for(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 - 1let res = []let i = 0, j = nums.length - 1while(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.ppmy.cn/news/59557.html

相关文章

c++ 入门概述

c 入门概述 1. c 关键字2. c 命名空间3. c 输入与输出4. c 缺省参数5. c 函数重载6. c 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 引用与指针区别 7. c 内联函数8. c auto 关键字9. 范围 for 循环 1. c 关键字 c 98中&#xff0c;规定的关键字总共有63个&#xff1a; 2. c…

Java时间类(三) -- Calendar()(日历类)

java.util.Calendar类是一个抽象类,它提供了日期计算的相关功能、获取或设置各种日历字段的方法。 protected Calendar() 构造方法为protected修饰,无法直接创建该对象。1. Calendar()的常用方法: 方法名说明static Calendar getInstance()使用默认时区和区域获取日历vo…

Java 网络编程 —— ServerSocket 详解

构造 ServerSocket ServerSocket 的构造方法有以下几种重载形式 ServerSocket() throws IOException ServerSocket(int port) throws IOException ServerSocket(int port, int backlog) throws IOException ServerSocket(int port, int backlog, InetAddress bindAddr) throw…

数据发送流程

在发送模式下&#xff0c;UART 的串行数据发送电路主要包括一个发送移位寄存器(TSR)&#xff0c;TSR 功能是将数据 逐个移位送出。待发数据必须先写到发送缓冲区中。 TXIFx 是发送中断标志位&#xff0c;可配置为发送缓冲区空或TSR 空。 数据的发送支持7bit 、8bit 或9bit 数据…

HTML(四) -- 多媒体设计

目录 1. 视频标签 2. 音频标签 3. 资源标签&#xff08;定义媒介资源 &#xff09; 1. 视频标签 属性值描述autoplayautoplay如果出现该属性&#xff0c;则视频在就绪后马上播放。controlscontrols表示添加标准的视频控制界面&#xff0c;包括播放、暂停、快进、音量等…

缓存击穿,穿透,雪崩

一、缓存穿透 是用户访问的数据既不在缓存当中&#xff0c;也不在数据库中。 如果从数据库查询不到数据&#xff0c;则不写入缓存。这就导致每次请求都会到数据库进行查询&#xff0c;缓存也失去了意义。 当高并发或有人利用不存在的Key频繁攻击时&#xff0c;数据库的压力骤…

【Go语言Web开发】Todolist 项目重构

写在前面 这篇文章我们来重构一下之前写的Todolist项目&#xff0c;包括项目结构&#xff0c;代码逻辑 项目地址&#xff1a;https://github.com/CocaineCong/TodoList 1. 项目结构的改变 1.1 改变前的项目架构 TodoList/ ├── api ├── cache ├── conf ├── middle…

python文件操作的基本流程

引入 程序运行过程中产生的数据会保存到内存中&#xff0c;如果想要永久保存下来&#xff0c;就必须将数据存放在硬盘上&#xff0c;应用程序如果想要操作计算机的硬件就必须通过操作系统&#xff0c;文件就是操作系统提供给应用程序来操作硬盘的虚拟概念&#xff0c;应用程序…