JavaScript:数组---双指针法

双指针法

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循环的工作。

定义快慢指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值