力扣周赛第二题,下午更新后两道

本题中其实看着条件很多,但是仔细读一下会发现,前四个条件都是固定条件。然后我们再看题。 我们的暴力做法是遍历a数组的字符串a的下标起始下标,然后遍历b数组的字符串b的下标起始下标,进行判断,但是这样会超时,所以我们是不是可以优化查找b数组,那么我们这里就发现到了一个第五个条件-k <= j - i <=k,i - k>=j,j <= k + i,那么我们有了已知的i和k,那么可以根据绝对值的数学性质找到j,那么我们怎么找最快呢,可以将b数组的下标加入到set中,然后通过lower_bound和upper_bound去寻找j,如果有,先判断该a数组下标是否添加过,如果添加过那就跳过,没有添加过就加入到res数组中。

class Solution {
public:
    //1.i范围已经定死了,查找a字符串的范围为0~s.size() - a.size();
    //满足上述条件之后还有一个就是从i开始,长度也已经定死了,只能是这个长度
    //2.s[i ~ (i + a.size() - 1)] == a
        
    //3.j范围已经定死了,查找b字符串的范围为0~s.size() - b.size();
    //满足上述条件之后还有一个就是从j开始,长度也已经定死了,只能是这个长度
    //4.s[j ~ (j + b.size() - 1)] == b
    
    //满足上述条件之后
    //5.abs(j - i) <= k
    
    int findAndRecord(string& source,string& target,vector<int>& positions)
    {
      int pos = source.find(target);
      while (pos != std::string::npos)
      {
        positions.push_back(pos);
        pos = source.find(target, pos + 1);
      }
      return positions.size(); // 返回找到的位置数量
    }
    bool st[110000];
    vector<int> beautifulIndices(string s, string a, string b, int k) 
    {
        memset(st,0,sizeof(st));
        int i_index_max = s.size() - a.size();
        int j_index_max = s.size() - b.size();//上述都是闭区间,下标
        
        int i_size_max = a.size();//固定a字符串长度
        int j_size_max = b.size();//固定b字符串长度
        vector<int> a_index;//存放a字符串的起始下标
        vector<int> b_index;//存放b字符串的起始下标
        findAndRecord(s,a,a_index);
        findAndRecord(s,b,b_index);
        set<int> s_b_index;
        vector<int> res;
        for(int i = 0;i < b_index.size();i++) s_b_index.insert(b_index[i]);
        
        for(int i = 0;i < a_index.size();i++) cout<<a_index[i]<<" ";
        cout<<endl;
        for(int i = 0;i < b_index.size();i++) cout<<b_index[i]<<" ";
        cout<<endl;
        
        for(int i = 0;i < a_index.size();i++)
        {
            //-k<=j - i<=k
            int _i_index = a_index[i];
            if(st[_i_index]) continue;
            int zhen_j = _i_index - k;//j>=i-k
            int fu_j = k + _i_index;//j<=k+i
       
                  auto it_lower = s_b_index.lower_bound(zhen_j);
                  if(it_lower != s_b_index.end())
                  {
                    if((abs(*it_lower - _i_index) <= k))
                    {
                          res.push_back(_i_index);
                          st[_i_index] = true;
                    }
                  }
    
             
                auto it_upper = s_b_index.upper_bound(fu_j);
                if(st[_i_index]) continue;
                if(it_upper != s_b_index.end())
                {
                    if((abs(*it_upper - _i_index) <= k))
                    {
                        res.push_back(_i_index);
                        st[_i_index] = true;
                    }
                } 
            
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/319224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[软件工具]通用OCR识别文字识别中文识别服务程序可局域网访问

【软件界面】 【算法介绍】 采用业界最先进算法之一paddlocr&#xff0c;PaddleOCR&#xff0c;全称PaddlePaddle OCR&#xff0c;是一种基于深度学习的光学字符识别&#xff08;OCR&#xff09;技术。相较于传统的OCR技术&#xff0c;PaddleOCR具有许多优点。 首先&#xff0…

如何创建一个pytorch的训练数据加载器(train_loader)用于批量加载训练数据

Talk is cheap,show me the code! 哈哈&#xff0c;先上几段常用的代码&#xff0c;以语义分割的DRIVE数据集加载为例&#xff1a; DRIVE数据集的目录结构如下&#xff0c;下载链接DRIVE,如果官网下不了&#xff0c;到Kaggle官网可以下到&#xff1a; 1. 定义DriveDataset类&…

Kibana:使用反向地理编码绘制自定义区域地图

Elastic 地图&#xff08;Maps&#xff09;附带预定义区域&#xff0c;可让你通过指标快速可视化区域。 地图还提供了绘制你自己的区域地图的功能。 你可以使用任何您想要的区域数据&#xff0c;只要你的源数据包含相应区域的标识符即可。 但是&#xff0c;当源数据不包含区域…

Spring集成

目录 概述1 声朋一个简单的集成流1.1 使用XML定义集成流1.2 使用Java配置集成流1.3 使用Spring lntegration 的 DSL 配置 2 Spring integration 功能概览2.1 消息通道2.2 过滤器2.3 转换器2.4 路由器2.5 切分器2.6 服务激活器2.7 网关2.8 通道适配器2.9 端点模块 概述 就像我们…

RibbonGroup 添加QLineEdit

RibbonGroup添加QLineEdit&#xff1a; QLineEdit* controlEdit new QLineEdit(); controlEdit->setToolTip(tr("Edit")); controlEdit->setText(tr("Edit")); controlEdit->setMinimumWidth(150); …

vue知识-04

计算属性computed 注意&#xff1a; 1、计算属性是基于它们的依赖进行缓存的 2、计算属性只有在它的相关依赖发生改变时才会重新求值 3、计算属性就像Python中的property&#xff0c;可以把方法/函数伪装成属性 4、computed: { ... } 5、计算属性必须要有…

Windows python下载

1、下载 进入到地址&#xff1a;https://www.python.org/dowmloads 可以直接下载最新的版本 或者点击Windows&#xff0c;查看下方更多的版本 点击文档就下载下来啦 2、安装 双击下载的文件&#xff0c;勾选Add python.exe to PATH添加到环境变量中&#xff0c;选择Coutomi…

【数据结构】树和二叉树堆(基本概念介绍)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​ 目录 前言 树的概念 树的常见名词 树与…

Linux工具-搭建文件服务器

当我们使用linux系统作为开发环境时&#xff0c;经常需要在Linux系统之间、Linux和Windows之间传输文件。 对少量文件进行传输时&#xff0c;可以使用scp工具在两台主机之间实现文件传输&#xff1a; rootubuntu:~$ ssh --help unknown option -- - usage: ssh [-46AaCfGgKkMN…

【面试突击】Java面试底层逻辑(HashMap、ConcurrentHashMap面试实战)

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

HashMap集合万字源码详解(面试常考)

文章目录 HashMap集合1.散列2.hashMap结构3.继承关系4.成员变量5.构造方法6.成员方法6.1增加方法6.2将链表转换为红黑树的treeifyBin方法6.3扩容方法_resize6.3.1扩容机制6.3.2源码resize方法的解读 6.4 删除方法(remove)6.5查找元素方法(get)6.6遍历HashMap集合几种方式 7.初始…

12.2内核空间基于SPI总线的OLED驱动

在内核空间编写SPI设备驱动的要点 在SPI总线控制器的设备树节点下增加SPI设备的设备树节点&#xff0c;节点中必须包含 reg 属性、 compatible 属性、 spi-max-frequency 属性&#xff0c; reg 属性用于描述片选索引&#xff0c; compatible属性用于设备和驱动的匹配&#xff…

pyinstaller,一个超酷的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超酷的 Python 库 - pyinstaller。 Github地址&#xff1a;https://github.com/pyinstaller/pyinstaller PyInstaller是一个用于将Python应用程序打包成独立可执行文件的工具。这可以将Python…

Leading Dimension是什么

在LAPACK中频繁出现Leading Dimension&#xff08;中文翻译为“主维度”&#xff09;&#xff0c;那么它是什么呢&#xff1f; 首先了解行主序&#xff08;Row-Major&#xff09;和列主序&#xff08;Column-Major&#xff09;的概念&#xff1a; Given a matrix A of shape …

宝塔nginx部署前端页面刷新报404

问题&#xff1a; 当我们使用脚手架打包前端项目的时候&#xff0c;如果前端项目并没有静态化的配置&#xff0c;如以下 当我们刷新页面&#xff0c;或进行路由配置访问的时候就会报404的错误 原因&#xff1a; 这是因为通常我们做的vue项目属于单页面开发。所以只有index.html…

Cocos 使用VsCode调试-跨域问题

解决方案&#xff1a; 在添加完debug配置后 在项目文件夹中打开vscode然后找到launch.json 这个runtimeArgs参数在原本的配置中是没有的,给他添加上去 "runtimeArgs": ["--disable-web-security" ] 原理: 禁用浏览器跨域检查&#xff08;仅用于调试&…

格密码基础:SIS问题的定义与理解

目录 一. 介绍 二. SIS问题定义 2.1 直观理解 2.2 数学定义 2.3 基本性质 三. SIS与q-ary格 四. SIS问题的推广 五. Hermite标准型 六. 小结 一. 介绍 short interger solution problem短整数解问题&#xff0c;简称SIS问题。 1996年&#xff0c;Ajtai首次提出SIS问…

物联网介绍

阅读引言&#xff1a; 本文从多方面叙述物联网的定义以及在物联网当中的各种通信的介绍。 一、物联网的定义 1.1 通用的定义 物联网&#xff08;Internet of Things&#xff0c;IOT&#xff1b;也称为Web of Things&#xff09;是指通过各种信息传感设 备&#xff0c;如传感器、…

基于51单片机的智能热水器设计

需要全部文件请私信关注我&#xff01;&#xff01;&#xff01; 基于51单片机的智能热水器设计 摘要一、绪论1.1 选题背景及意义1.2 完成目标与功能设计 二、硬件系统设计2.1 硬件完成要求2.2 方案选择2.3 电源电路设计2.4 键盘电路2.5 蜂鸣器报警电路2.6 温度检测电路2.7 红…