JavaScript刷题——双指针、数组的内置方法

快慢指针

141.环形链表
给你一个链表的头节点 head ,判断链表中是否有环。

因为fast指针一次走两步,注意判断条件

while(fast!=null && fast.next!=null)

判断是否同一个节点slow == fast

142.环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
以前使用python的解析
fast和slow第一次在环内相遇。
slow1在头结点开始和slow继续环内移动,第二次在环入口相遇。
至于为什么第二次相遇就是在环入口,查看链接的数学解释。

876.链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。

19.删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
因为要删除节点,所以找的是倒数第N个节点的前一个节点,所以快的节点不再是移动到null。while(j.next)不同于剑指 Offer 22. 链表中倒数第k个节点。

左右指针

167.两数之和 II - 输入有序数组
numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length

拓展题:1. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

方法:我们遍历到数字 aa 时,用 targettarget 减去 aa,就会得到 bb,若 bb 存在于哈希表中,我们就可以直接返回结果了。若 bb 不存在,那么我们需要将 aa 存入哈希表,好让后续遍历的数字使用。

你可以使用对象{}数据结构,也可以使用Map数据结构,两者的区别,该题执行用时是一样的。

344.反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

通过解构赋值,可以直接交换两个数
[s[le],s[ri]] = [s[ri],s[le]];

W3C数组的方法
拼接数组 splice() 方法可用于向数组添加新项。

合并(连接) 数组concat() 方法通过合并(连接)现有数组来创建一个新数组。

裁剪数组 slice() 方法用数组的某个片段切出新数组。

W3C数组的方法
数组排序 sort() 方法以字母顺序对数组进行排序。默认地,sort() 函数按照字符串顺序对值进行排序。

反转数组 reverse() 方法反转数组中的元素。

比值函数修正sort()方法
升序排序

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b}); 

比值函数: 比较函数的目的是定义另一种排序顺序。比较函数应该返回一个负,零或正值。

在这里插入图片描述
对数组使用 Math.max()
您可以使用 Math.max.apply 来查找数组中的最高值。
Math.max.apply([1, 2, 3]) 等于 Math.max(1, 2, 3)

滑动窗口算法

这也许是双指针技巧的最高境界了,如果掌握了此算法,可以解决一大类子字符串匹配的问题。在下一节涉及。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值