当前位置: 首页 > article >正文

【C++ 算法进阶】算法提升二十四

目录标题

  • 数组对排序 (数学问题)
    • 题目
    • 题目分析
  • 分割数组问题 (前缀和)
    • 题目
    • 题目分析
  • 字符串包含另一个字符串 (滑动窗口)
    • 题目
    • 题目分析

数组对排序 (数学问题)

题目

给定一个数组arr 数组是无序的 数组中每两个数字都可以两两组成一个数据对

现在要求你将组成的所有数据对排序 求出其中第K小的某个数据对

题目分析

这道题目实际上是个数学问题

我们可以先将整个数组排序 然后求出前面每个数字能组成的数据对是多少 (其实就是数组的长度)

然后我们就能求出这个数据对第一个数是多少

之后我们按照类似的方法求出第二个数即可

时间复杂度为N * LogN

分割数组问题 (前缀和)

题目

给定一个数组arr 数组的长度一定大于6 现在要求你讲整个数组分成四段 也就是切三刀

每一刀都必须在数组的一个元素上 且这个元素不属于任意一段

现在请问 给你一个数组 该数组是否能分成四段一样的数值

题目分析

首先我们建立一个前缀和数组

第一刀的位置我们是无法确定的 只能一个个尝试 但是确定了第一刀的位置之后 后续的位置就相对确定下来了

  1. 第一刀的尝试 从0位置开始到终止位置 -5结束都可以尝试
  2. 确定了第一刀的位置之后 我们就可以求出第一区间的前缀和 (当前位置的前缀和 - 切刀位置的元素)
    之后我们想确定第二刀的位置就简单很多了 假设第一刀位置的元素是9 第一区间的值为100 那么我们就要找到前缀和为209的位置 在它的下一位置切一刀 (找不到或者末尾位置是都直接pass )

字符串包含另一个字符串 (滑动窗口)

题目

现在给定你一个字符串s2 现在请问字符串s1中是否有一个子串包含s2 如果有 返回其中最小的一个子串

题目分析

字符包含问题我们都可以使用滑动窗口 + map来解决

我们可以使用一个map来记录s2中字符出现的次数 使用一个变量all来记录滑动窗口区间的欠账

当all大于0的时候 R不断右扩

当all等于0的时候 L不断右缩

每次当all等于0的时候 我们看看区间是否更小了 不断循环即可


http://www.kler.cn/a/416383.html

相关文章:

  • Mac——鼠标增强插件Mos
  • 力扣200 岛屿数量 Java版本
  • 怎么 php 基本都是外包 ?
  • 【湿度数据处理】中国地面气候资料日值数据集(V3.0)(MATLAB全代码)
  • MyBatis(mybatis_plus)中TypeHandler的使用教程
  • Java的LinkedList、HashSet与TreeSet
  • 基础Web安全|SQL注入
  • 【知识科普】设计模式之-责任链模式
  • 无人机+自组网+指挥车:空地一体化组网指挥系统技术详解
  • GO/Golang
  • AI开发:逻辑回归的概念 应用及开发初学- Python
  • 日常应用开发遇到的小问题二三则
  • Uniapp 安装安卓、IOS模拟器并调试
  • 长时间无事可做是个危险信号
  • aws出现创建ec2连接报错(网络问题)
  • webpack5 的五大核心配置(二)
  • redis中的bigkey及读取优化
  • 深度学习3:数据预处理使用Pandas与PyTorch的实践
  • 全面解析 MySQL 常见问题的排查与解决方法
  • USB-C取电协议芯片与LDR6328的功能解析