双指针算法

双指针算法

严格来说的话只是一种解题技巧,实际上就是用两个指针来解决一道题.

也有一些题目可能会遇到三指针或四指针,核心思想都大差不差.

大概分为以下三种:

普通双指针:两个指针往同一个方向移动

对撞双指针:两个指针面对面移动

快慢双指针:一个慢指针,一个快指针 

核心思想:

for(int i=0;i<n;i++)

        for(int j=0;j<n;j++)         改善左边的暴力解法 使时间复杂度从O(n^2)降到O(n)

两种指法:

一般套路:

for(i=0,j=0;i<n;i++)                        //对i进行遍历
{

        While(j<i&&cheak(I,j) j++;     //j<i是j的位置    cheak(I,j)看题目具体情况分析

        ******* //每道题目具体逻辑
}

例题:输入一个字符串 每个单词用空格隔开 要求把每个单词单独输出 每个单词占一行

例如
输入:how are you
输出:how
     are
     you
#include<iostream>
#include<string>
using namespace std;

int mian()
{
	char str[1000];
	gets(str);
	int n=strlen(str);
	for(int i=0;i<n;i++)
    {
        int j=i;
        while(j<n&&str[j]!=' ') j++;
        
        for(int k=i;k<j;k++) cout<<str[k];
        cout<<endl;

        i=j;
    }
	
	
	return 0;
}

参考视频:

1.acw基础算法课 

2.Leetcode力扣必备算法知识和练习题|手画图解版【持续更新ing】_哔哩哔哩_bilibili 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值