首页 > 编程语言 >算法刷题系列之移除元素:快慢指针技巧

算法刷题系列之移除元素:快慢指针技巧

时间:2023-05-14 20:45:15浏览次数:39  
标签:right 窗口 元素 算法 数组 移除 指针 刷题

题目+日期

  1. 移除元素 2023年5月14日17点50分

基础知识

暴力解法

这个题目暴力的解法就是两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。

双指针法(快慢指针法)

通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

定义快慢指针

快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置

如果 fast 遇到值为 val 的元素,则直接跳过,否则就赋值给 slow 指针,并让 slow 前进一步。

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

相关题目

26.删除排序数组中的重复项✔
83.删除排序链表中的重复元素✔
283.移动零✔:即移除0,然后slow后元素赋值为零
844.比较含退格的字符串
方法一:重构字符串
977.有序数组的平方

拓展

滑动窗口算法

滑动窗口算法的快慢指针特性:

left 指针在后,right 指针在前,两个指针中间的部分就是「窗口」,算法通过扩大和缩小「窗口」来解决某些问题。

滑动窗口算法框架
/* 滑动窗口算法框架 */
void slidingWindow(string s, string t) {
    unordered_map<char, int> need, window;
    for (char c : t) need[c]++;
    
    int left = 0, right = 0;
    int valid = 0; 
    while (right < s.size()) {
        char c = s[right];
        // 右移(增大)窗口
        right++;
        // 进行窗口内数据的一系列更新

        while (window needs shrink) {
            char d = s[left];
            // 左移(缩小)窗口
            left++;
            // 进行窗口内数据的一系列更新
        }
    }
}

标签:right,窗口,元素,算法,数组,移除,指针,刷题
From: https://www.cnblogs.com/yimumengke/p/17399749.html

相关文章

  • pwn刷题笔记
    jarvisoj_level2(ret2text)checksec检查保护机制,开启了NX。vulnerable_function函数处存在栈溢出漏洞:buf只能存放0x88个字节,但可以读入0x100个字节。system函数plt地址:0x8048320ida查看字串,“/bin/sh”地址:0x804A024构造payload#!/usr/bin/envpython3frompwnimport*io......
  • MISC刷题心得 与百度,谷歌,github语法总结
    MISC介绍:MISC,中文即杂项,包括隐写,数据还原,脑洞、社会工程、压缩包解密、流量分析取证、与信息安全相关的大数据等。竞赛过程中解MISC时会涉及到各种脑洞,各种花式技巧,主要考察选手的快速理解、学习能力以及日常知识积累的广度、深度。misc几种常见格式文件头:png:89504E47jpg:FFD......
  • unique_ptr智能指针介绍
    unique_ptr是C++标准库提供的智能指针之一,具有以下特点:独占所有权:unique_ptr独占指向对象的所有权,确保在任何时候只有一个unique_ptr可以指向同一个对象。当unique_ptr被销毁或转移所有权时,它会自动释放指向的对象,无需手动删除。轻量高效:unique_ptr是一种轻量级的智能指针,通......
  • OJ刷题之旅
    题目描述wzazzy先将天上n个星星排成一排,起初它们都是暗的。他将挥动n次魔法棒,第i次挥动会将编号为i的正整数倍的星星的亮暗反转,即亮的星星转暗,暗的星星转亮。wzazzy想问,最终会有多少个星星依旧闪亮在天空。输入一个整数n,含义请见题目描述。1<=n<=1e18输出一个整数ans,即n次操......
  • LeetCode 刷题 —— 辅助栈
     42. 接雨水classSolution{publicinttrap(int[]height){intres=0;Stack<Integer>leftWallStack=newStack();intlen=height.length;leftWallStack.push(0);for(inti=1;i<len;i++){......
  • 指针进阶(2)——玩转指针
    今天内容不多,但都是精华。1.数组参数和指针参数2.函数指针2.1笔试题3.函数指针数组1.数组参数和指针参数例1:一维数组传参voidtest(intarr[]){}voidtest(intarr[10]){}voidtest(int*arr){}voidtest2(int*arr2[20]){}voidtest2(int**arr2){}传参的时候,*arr2......
  • 【Leetcode算法01】双指针Two Pointers
    TableofContents同向双指针剑指offer05.替换空格相向双指针344.反转字符串206.反转链表151.翻转字符串里的单词19.删除链表的倒数第N个节点160.相交链表142.环形链表II15.三数之和18.四数之和快慢双指针27.移除元素Solutions27.移除元素力扣题......
  • 双指针——最长连续不重复子序列(例)
    给定一个长度为n的整数序列,找出最长的不包含重复的数的连续区间,输出它的长度。数据范围: 输入样例:512235输出样例:3 #include<iostream>//C++标准库中的头文件.用于控制台输入和输出。#include<cstring>//用于处理字符串的函数和操作#include<algorithm>/......
  • 【华为HCIP | 高级网络工程师】刷题日记(5)
    文章目录每日刷题30道1、已知路由器R1存在Loopback0且地址为1.1.1.1/32,在使能OSPF并引入直连路由时会把该环回口引入。那么以下哪一项的配置能够实现在引入直连路由时,Loopback0不会被引入,并能够保证其他直连路由引入到OSPF内?2、在MA网络中的两台DRother路由器R1和R2建立邻居关系,那......
  • 【华为HCIP | 高级网络工程师】刷题日记(4)
    文章目录每日刷题30道1、在OSPF中部署Filter-Policy时,Filter-Policy会修改该OSPF的LSDB。2、如图所示,R1和R2已在BFD中配置了本端发送时间间隔和本端接收时间间隔及本端的BFD检测倍数。现R1和R2采用异步模式检测,那么R1实际检测时间是多少?3、USG防火墙上存在多个默认安全区域,其中Unt......