双指针算法

1、分类

(1) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作

(2) 对于一个序列,用两个指针维护一段区间

2、核心思想

 for( int i = 0 ; i<n;i ++ )
     for( int j = 0 ; j < n ; j ++ )
         时间复杂为O(n^2)

正常做题的时候一般都会使用两个for循环来解决问题

双指针算法的作用就是为了上面的朴素算法的时间复杂度优化到O(n)

3、代码模版

for( i = 0 ,j==0 ;i<n; i ++ )
 {
     while( j < i && check(i,j) )  j ++;
     
     //每道题的具体逻辑
 }

4、测试题

给定一串字符,每段字符之间可能会有空格,以空格为会车点输出结果

案例:

abd des ajs

结果:

abd

des

ajs

 
#include <iostream>
 #include <string.h>
 ​
 using namespace std;
 ​
 int main()
 {
     char str[100];
     //读入该字符
     gets_s(str,100);
     //计算字符的长度
     int n = strlen(str);
 ​
     for (int i = 0; i < n; i++)
     {
         int j = i;
         //该条件下,最终j的位置停留在空格的地方
         while (j < n && str[j] != ' ') j++;
 ​
         //具体逻辑
         for (int k = i; k < j; k++)
             cout << str[k];
         cout << endl;
         //赋值给i之后,i ++ 从下一个字符开始
         i = j;
     }
 ​
     return 0;
 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年负剑去

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值