首页 > 编程语言 >《算法妙趣生,代码启征程》---第一期:双指针算法

《算法妙趣生,代码启征程》---第一期:双指针算法

时间:2024-09-17 11:54:50浏览次数:9  
标签:right nums int 妙趣 --- ++ 算法 指针 left

    写这个系列是为了记录我所学习的模块,进行分析 + 总结 + 归纳。如果你也对算法感兴趣,可以跟着我一起学习总结,我会在我理解明白了的基础上,进行尽可能详细,通俗易懂的语言进行表达。

目录

 1. 是什么

2 .题目解析

(1) 移动零 283. 移动零 - 力扣(LeetCode)

(2) 复写零 1089. 复写零 - 力扣(LeetCode)

(3)快乐数  202. 快乐数 - 力扣(LeetCode)

(4) 盛水最多的容器 11. 盛最多水的容器 - 力扣(LeetCode)

3.总结 


 1. 是什么

   双指针,顾名思义就是使用两个指针解决问题。分为:对撞指针、快慢指针,对于解决数组,循环问题有很大的帮助。

2 .题目解析

(1) 移动零 283. 移动零 - 力扣(LeetCode)

 

对于这道题是想要移动一下 0 ,我们可以采用数组分块的思想。通过 left ,right 两个指针将区域分为3个部分,实数区、0区、未检测区。

开始时 left 指针指向了 -1 这个位置,right 指向 0。当 right 指向了 0 就不用管 right++,如果是right 指向了非零数字需要对于  left++ ,之后再交换 left 和 right , right++再判断是否为0;以left < right 为结束条件进行终止。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int left = -1;
        int n = nums.size();
        int right = 0;
        for(right = 0; right < n;)
        {
            if(nums[right] == 0)
            {
                right++;
            }
            else 
            {
                left++;
                int tmp = nums[left];
                nums[left] = nums[right];
                nums[right] = tmp;
                right++;
            }
        }
    }
};

还可进行优化,去除掉重复的部分。这就是算法的魅力。

标签:right,nums,int,妙趣,---,++,算法,指针,left
From: https://blog.csdn.net/2405_85784684/article/details/142288246

相关文章

  • 【SCI2区】麻雀搜索算法SSA-TCN-Multihead-Attention回归预测(多输入单输出)【含Matlab
    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。......
  • ego-planner开源代码之数据流分析
    ego-planner开源代码之数据流分析1.源由2.测试策略2.1黑盒测试(BlackBoxTesting)2.2灰盒测试(GrayBoxTesting)2.3白盒测试(WhiteBoxTesting)3.后续汇总4.参考资料5.附录5.1rosbag命令操作详细解释和举例1.记录数据:`rosbagrecord`2.播放数据:`rosbagplay`3.......
  • 201909-2 小明种苹果(续)ccfcsp
    一道简单的模拟。。。includeincludeusingnamespacestd;intmain(){constintN=1010;booldrop[N]={false};intn,m,i,j,cnt=0,cnt1=0;cin>>n;inty;intsum=0,sum1,temp=0;intindex;for(i=0;i<n;i++){ sum1=0;scanf("%d",&m);for(j=0;j&......
  • 贪心算法-找不重叠的区间段
    1.说明有N个区间片段,查找其中不重叠的片段最大个数。例如(68),(24),(35),(15),(59),(810)这6个片段中,不重叠的片段最大个数为3,分别为(24),(68),(810)。2.解析先按照起始位置从小到大进行排序,使用贪心算法使有效片段尽可能小,即结束位置更靠前。当前片段如果属于上个有效片段的子段,......
  • AnomalyLLM: Few-shot Anomaly Edge Detection for Dynamic Graphs using Large Langu
    本文是LLM系列文章,针对《AnomalyLLM:Few-shotAnomalyEdgeDetectionforDynamicGraphsusingLargeLanguageModels》的翻译。AnomalyLLM:使用大型语言模型对动态图进行少量异常边缘检测摘要1引言2相关工作3前言4方法5实验6结论摘要检测动态图的......
  • C#数据结构与算法实战入门指南
    前言在编程领域,数据结构与算法是构建高效、可靠和可扩展软件系统的基石。它们对于提升程序性能、优化资源利用以及解决复杂问题具有至关重要的作用。今天大姚分享一些非常不错的C#数据结构与算法实战教程,希望可以帮助到有需要的小伙伴。C#经典十大排序算法主要讲解C#经典......
  • 历年CSP-J初赛真题解析 | 2019年CSP-J初赛阅读程序(16-33)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客#include<cstdio>#include<cstring>usingnamespacestd;charst[100];intmain(){scanf("%s",st);intn......
  • 比亚迪E-VALI亮相国际交通运输博览会:新品首秀引领绿色物流革命
    9月17日最新报道,2024年度德国汉诺威国际交通运输博览会(IAATransportation2024)已于9月16日正式拉开帷幕。作为全球规模最宏大、影响力最深远的商用车专业展会,本届博览会展现出行业发展的最新趋势与成果,吸引来自世界各地的专业人士参与交流。比亚迪新品亮相,聚焦绿色物流解决......
  • python- +和+=的区别
     区别:+使用__add__函数,返回新地址+= 可变数据时使用__iadd__函数,返回原地址;不可变数据用__add__函数 不可变数据#不可变数据+和+=都用__add__函数i=10i=i+2print(id(i))i+=2print(id(i)) 可变数据#可变数据+使用__add__函数,返回新地址#......
  • 基于sqli-labs Less-5 sql报错注入详解
    按照之前的思路发现,是正常的'闭合的字符型,但是在联合注入0'unionselect1,2,3--+没有回显注入点,只是回显Youarein,因此无法使用联合注入,考虑使用报错注入或者盲注。考虑到本题会给出数据库的错误信息,且盲注比较麻烦,尝试使用报错注入1.报错注入函数简介1.1updatexml函数UP......