经典双指针算法试题(一)

简介: 经典双指针算法试题(一)

一、移动零


1、题目讲解

15dddda74f7246b895133a5c4f7e1f6b.png


2、讲解算法原理

013a363b8bf3498f8cb46672eaf0a010.png


3、代码实现

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        for(int cur=0,dest=0;cur<nums.size();cur++)
        {
            if(nums[cur])
            {
                swap(nums[cur],nums[dest++]);
            }
        }
    }
};



二、复写零


1、题目讲解

0223b28e94a04ed89d7257964cdc57e9.png

2、讲解算法原理


a4c92defda38493992805bc13bc6debd.png

310fcb845fdb44579577e1f0df328668.png


b3cc98573e3344d58173d0d595e3bbd8.png

2b94672f02b94cf19347d89ff864e508.png

3、代码实现

class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        int cur=0,dest=-1,n=arr.size();
        while(cur<n)
        {
            if(arr[cur]) dest++;
            else dest+=2;
            if(dest>=n-1) break;
            cur++;
        }
        if(dest==n)
        {
            arr[n-1]=0;
            cur--;
            dest-=2;
        }
        while(cur>=0)
        {
            if(arr[cur]) arr[dest--]=arr[cur--];
            else 
            {
                arr[dest--]=0;
                arr[dest--]=0;
                cur--;
            }  
        }  
    }
};



三、盛水最多的容器


1、题目讲解

eea9d7d4979241aaba55c1efaa233daa.png

137610613efb4c86a8cd58f046ec849b.png

2、讲解算法原理

84429169611f4a12b6e3dd542277bacc.png

3、代码实现

class Solution {
public:
    int maxArea(vector<int>& height) {
        int max=0,begin=0,end=height.size()-1;
        while(begin<end)
        {
            if(height[begin]>height[end])
            {
                int v1=height[end]*(end-begin);
                if(v1>max)
                max=v1;
                --end;
            }
            else
            {
                int v2=height[begin]*(end-begin);
                if(v2>max)
                max=v2;
                ++begin;
            }
        }
        return max;
    }
};



四、快乐数


1、题目讲解

002073a83e16440ea9ad0dce4af08b3c.png

2、讲解算法原理

899b9f08d1804ad492f9cc5800fb0db8.png

3、代码实现

class Solution {
public:
    int bigsum(int n )
    {
        int sum=0;
        while(n)
        {
            int ret=n%10;
            sum+=ret*ret;
            n/=10;
        }
        return sum;
    }
    bool isHappy(int n) {
        int slow=n,fast=bigsum(n);
        while(fast!=slow)
        {
            fast=bigsum(bigsum(fast));
            slow=bigsum(slow);
        }
        return slow==1;
    }
};


目录
相关文章
|
2月前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
35 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
6月前
|
算法
双指针算法
双指针算法
34 2
|
3月前
|
算法 索引 容器
双指针算法详解
本文介绍了双指针算法及其应用。双指针算法是在数组或字符串中常用的高效技术,通过维护两个指针遍历数据结构以解决特定问题。根据指针移动方向,可分为同向双指针、相向双指针和快慢指针。同向双指针如移动零和复写零问题;快慢指针如快乐数问题;相向双指针如盛水最多的容器、有效三角形数量及多数之和等问题。通过合理运用双指针技巧,可简化代码并提高效率。
69 4
双指针算法详解
|
2月前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
2月前
|
搜索推荐 C语言 C++
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)
|
4月前
|
算法 容器
【算法】双指针
【算法】双指针
|
4月前
|
算法 C++ 容器
【C++算法】双指针
【C++算法】双指针
|
7天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
13天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。