首页 > 其他分享 >双指针

双指针

时间:2024-01-28 16:57:08浏览次数:28  
标签:cnt int ++ while str 指针

似乎比较useless,暂时就浅尝辄止

概述

找到答案的单调性,把原来多重循环嵌套 \(O(n^2)\) 的枚举优化成双指针维护的 \(O(n)\) 枚举。

//暴力
for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
		todo;
    }

//双指针
for (int i = 0; j = 0; i < n; i++) {
	while(j < i && check(i, j)) j++;
}

寻找单词

//input
I am lyh

//output
I
am
lyh
int main() {
	char str[1000];
    gets(str);
    for (int i = 0; str[i]; i++) {
		int j = i;//i 为单词开头,j 为单词末尾
        while(j < n && str[j] != ' ') j++;
        for (int k = i; k < j; k++) cout << str[k];
        cout << endl;
        i = j;
    }
    return 0;
}

最长连续不重复子序列

//input
1 2 2 3 5

//output
3
int main() {
    cin >> n;
    for (int i = 0; i < n; i++) cin >> a[i];
    int res = 0;
    for (int i = 0, j = 0; i < n; i++) {
		cnt[a[i]]++;
        while(cnt[a[i]] > 1) {//直到j和i之间没有重复元素为止
			cnt[a[j]]--;
            j++;
        }
        res = max(res, i - j + 1);
    }
    cout << res << endl;
	return 0;
}

标签:cnt,int,++,while,str,指针
From: https://www.cnblogs.com/kdlyh/p/17992998

相关文章

  • C++类指针未初始化导致访问成员变量时报段错误
    #安装gcc和g++yuminstallgccyuminstallgcc-c++.x86_64//a.cpp#include<iostream>#include<unistd.h>usingnamespacestd;classTest{public:  voidtest1(){  }  voidtest2(){    age=10;  }private:  intage;}......
  • (坚持每天写算法)算法复习与学习part1基础算法part1-12——双指针算法
    双指针是一种思路,很多题都可能用得到,这里我就只选取Acwing网站的三道题(事实上我最近就是在这里刷题,leetcode反而不怎么去了,刷完这个网站的我就会去leetcode刷了)双指针一般来讲会在数组有序的情况下应用,但是如果是无序的也是有可能的,两个指针会遍历整个数组(如果条件允许的......
  • Spring中没有注入而是new导致空指针异常
    背景:在BeforeSave_2250042中调用了一个公共模块CommonVerifyHandler的verifySeal()方法,但是运行时显示空指针异常空指针异常:CommonVerifyHandler类:@ComponentpublicclassCommonVerifyHandler{@AutowiredpublicCommonVerifyHandlerMappercommonVerifyHandler......
  • Leetcode刷题第四天-双指针-二分法
    15:三个数之和链接:15.三数之和-力扣(LeetCode)em...双冲for循环,从头去遍历,0-(a+b)是否在列表中,最终timeout数组从小到大排序,设置三个指针,i从头遍历到lens-1,j从i+1开始,k从lens-1开始,sums==0,放入结果,大于0,k-1,小于0,j+1如果i和i+1比较,相同跳过的话,会丢结果,i和i-1相等跳过,因为i-1已......
  • ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR详解
    堆栈的实现方法        在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push)。通常用一个指针(堆栈指针SP—StackPointer)实现做一次调整,SP总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆......
  • 无涯教程-Rust - 智能指针
    Rust默认情况下在堆栈上分配所有内容,您可以通过将它们包装在智能指针(如Box)中来将它们存储在堆上,智能指针实现下表中列出的特征-Sr.NoTraitnamePackage&描述1Derefstd::ops::Deref用于不可变的取消引用操作,如*v。2Dropstd::ops::Drop当值超出范围时用于......
  • C语言和C++中的空指针区别
    C语言中,空指针是NULL,是一个宏在C++中NULL似乎也可以用,但是C++中的NULL其实是有问题的。C++大佬在设计的时候可能没有考虑全面在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使......
  • java中双指针算法(快指针与慢指针)
    双指针法:设置两个指针,分别是快指针和慢指针,分别是i和j。  设置一个变量temp用来储存第一个数据nums[0] 过程:1.nums[0]  temp  他们两个相等  那么temp不需要改变,i=i+1,j变,i=1,j=1   2.nums[i=1],temp  他们两个相等,temp不变,i=i+1,j不......
  • .NET(C#) 中使用指针
    ​ 在.NET中,C#默认情况下是一种安全的、不支持直接使用指针的语言。然而,C#支持在特定情况下使用不安全代码(即可以使用指针的代码)。使用不安全代码意味着放弃了C#和.NET运行时提供的一些安全保障,因此必须谨慎使用。不安全代码可能会增加程序出错的风险,特别是与内存管理......
  • Leetcode刷题第三天-贪心-双指针
    738:单调递增链接:738.单调递增的数字-力扣(LeetCode)嘶~介个介个恶心心,从后往前遍历,前一个数比当前数大,前一个数-1,当前数变为9需要注意的是,保证每个9后面全是9100,第一轮遍历完时90T_T1classSolution:2defmonotoneIncreasingDigits(self,n:int)->int:3......