带你读《图解算法小抄》十九、双指针(4)

简介: 带你读《图解算法小抄》十九、双指针(4)

带你读《图解算法小抄》十九、双指针(3)https://developer.aliyun.com/article/1348032?groupCode=tech_library


4.移动零

1问题描述:

给定一个数组 nums,编写一个函数,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

 

示例:

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]

 

注意:

必须在原数组上操作,不能拷贝额外的数组。

尽量减少操作次数。

2解题步骤:

设置两个指针,一个快指针,一个慢指针。快指针用于遍历数组,慢指针用于标记非零元素的最后一个位置。

 

当快指针遍历数组时,如果遇到非零元素,将这个元素移到慢指针的位置,然后慢指针向前移动一位。

 

当快指针遍历完整个数组后,慢指针及其后面的所有位置都应该被赋值为 0。

3解题框架:

function moveZeroes(nums) {
    let lastNonZeroFoundAt = 0;
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] !== 0) {
            nums[lastNonZeroFoundAt++] = nums[i];
        }
    }
    for (let i = lastNonZeroFoundAt; i < nums.length; i++) {
        nums[i] = 0;
}
}

5.反转字符串

1问题描述:

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

 

你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

 

你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

 

示例:

输入:["h","e","l","l","o"]

输出:["o","l","l","e","h"]

2解题步骤:

设置两个指针,一个在开头,一个在末尾。开头的指针称为左指针,末尾的指针称为右指针。

 

当左指针小于右指针时,交换两个指针指向的元素,然后左指针右移一位,右指针左移一位。

 

重复步骤 2,直到左指针大于或等于右指针,此时所有元素已经反转,算法结束。

3解题框架:

function reverseString(s) {
    let left = 0, right = s.length - 1;
    while (left < right) {
        // swap s[left] and s[right]
        let temp = s[left];
        s[left] = s[right];
        s[right] = temp;        left++;
        right--;
}
}


带你读《图解算法小抄》十九、双指针(5)https://developer.aliyun.com/article/1348030?groupCode=tech_library

相关文章
|
11天前
|
算法
双指针算法
双指针算法
9 2
|
27天前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
2月前
|
算法
【优选算法】——双指针——15. 三数之和
【优选算法】——双指针——15. 三数之和
【优选算法】——双指针——15. 三数之和
|
2月前
|
存储 人工智能 算法
c++算法学习笔记 (9) 双指针
c++算法学习笔记 (9) 双指针
|
2月前
|
算法
[优选算法]——双指针——Leetcode——1089. 复写零
[优选算法]——双指针——Leetcode——1089. 复写零
|
17天前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
17天前
|
算法 容器
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
|
2月前
|
算法 前端开发 JavaScript
< 每日算法:一文带你认识 “ 双指针算法 ” >
`双指针`并非指的是一种具体的公式或者范式。而是一种运算思路,用于节省逻辑运算时间的`逻辑思路`!双指针算法通常用于`优化时间复杂度`!
< 每日算法:一文带你认识 “ 双指针算法 ” >
|
2月前
|
存储 算法 容器
算法:双指针
算法:双指针
25 3
|
2月前
|
算法 C++
【优选算法】——双指针——18. 四数之和
【优选算法】——双指针——18. 四数之和