【优选算法题练习】day5

news2024/12/24 3:34:05

文章目录

  • 一、904. 水果成篮
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 二、438. 找到字符串中所有字母异位词
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 三、30. 串联所有单词的子串
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 总结


一、904. 水果成篮

1.题目简介

904. 水果成篮
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。
你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:
你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。
给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。
在这里插入图片描述
在这里插入图片描述

2.解题思路

3.代码

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int left = 0, right = 0;
        int ret = 0;
        int kinds = 0;
        vector<int> ma(100000);
        while(right < fruits.size())
        {
            //入窗口
            if(ma[fruits[right]] == 0) kinds++;
            ma[fruits[right++]]++;
            //出窗口
            while(kinds > 2)
            {
                ma[fruits[left]]--;
                if(ma[fruits[left]] == 0) kinds--;
                left++;
            }
            //更新结果
            ret = max(ret, right - left);
        }
        return ret;
    }
};

4.运行结果

在这里插入图片描述

二、438. 找到字符串中所有字母异位词

1.题目简介

438. 找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
在这里插入图片描述

2.解题思路

3.代码

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        int n = s.size(), m = p.size();
        vector<int> vp(26, 0);
        for(auto& e : p)
        {
            vp[e - 'a']++;
        }
        vector<int> vc(26, 0);
        int left = 0, right = 0;
        int count = 0;
        vector<int> ret;
        while(right < n)
        {
            //ruchaungkou
            if(++vc[s[right] - 'a'] <= vp[s[right] - 'a']) count++;
            //chuchuangkou
            if(right - left + 1 > m)
            {
                if(vc[s[left] - 'a']-- <= vp[s[left] - 'a']) count--;
                left++;
            }
            if(count == m) ret.push_back(left);
            right++;
        }
        return ret;
    }
};

4.运行结果

在这里插入图片描述

三、30. 串联所有单词的子串

1.题目简介

30. 串联所有单词的子串
给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。
s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。
例如,如果 words = [“ab”,“cd”,“ef”], 那么 “abcdef”, “abefcd”,“cdabef”, “cdefab”,“efabcd”, 和 “efcdab” 都是串联子串。 “acdbef” 不是串联子串,因为他不是任何 words 排列的连接。
返回所有串联字串在 s 中的开始索引。你可以以 任意顺序 返回答案。
在这里插入图片描述
在这里插入图片描述

2.解题思路

3.代码

class Solution {
public:
    vector<int> findSubstring(string s, vector<string>& words) {
        unordered_map<string, int> ma1;//words中单词及出现的频率
        //map<第一个元素, 第二个元素>
        for(auto& e : words)
        {
            ma1[e]++;
        }
        int len = words[0].size(), m = words.size();
        int left = 0, right = 0;
        vector<int> ret;
        for(int i = 0;i < len; ++i)
        {
            unordered_map<string, int> ma2;
            int count = 0;//
            for(int left = i, right = i;right + len <= s.size(); right += len)
            {
                //入窗口
                string t1 = s.substr(right, len);
                if(++ma2[t1] <= ma1[t1]) count++;
                //出窗口
                while(right - left + 1 > len * m)
                {
                    string t2 = s.substr(left, len);
                    if(ma2[t2]-- <= ma1[t2]) count--;
                    left += len;
                }
                //更新结果
                if(count == m)//判断当前滑动窗口是否满足题目要求
                {
                    ret.push_back(left);
                }
            }
        }
        return ret;
    }
};

4.运行结果

在这里插入图片描述


总结

今天是算法练习的第5天。
天道酬勤 ,继续加油。
题目来源:力扣(LeetCode),著作权归领扣网络所有。
如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

夏日酷暑高温,设备陆续罢工,为什么这款DTU却能久经“烤”验

炎炎夏日&#xff0c;终于迎来周末的东东&#xff0c;想要出门却发现所在地区不断弹出高温预警&#xff0c;刚买来的雪糕因为在桌子上放了1分钟&#xff0c;再打开包装时才发现其已经开始消融&#xff0c;那小雪人精致的面容也如同被太阳炙烤般扭曲变形&#xff0c;并时不时滴下…

CUnit在ARM平台上的离线搭建(让CUnit编译安装成功之后的可执行文件.so变成ARM下的—ARM aarch64)(实用篇)

前言&#xff1a;1 CUint-2.1-3.tar.bz2压缩安装包下载并解压2 进入CUint-2.1-3目录并且通过指令./bootstrap*产生configure *执行文件3 执行./configure*命令4 make编译5 make install 安装 前言&#xff1a; 在X86架构上的Linux操作系统上面进行cmake编译&#xff08;Cyclon…

为你解密免费音频格式转换器软件有哪些

音频格式转换技术是一种将音频文件从一种格式转换为另一种格式的技术。这项技术非常有用&#xff0c;可以帮助我们在不同设备和平台上播放和共享音频文件。现在市场上有许多免费的音频格式转换器软件可供选择&#xff0c;它们提供了方便、快捷的方式来进行音频格式转换。如果你…

MFC 将工具栏的两项中加入空白按钮

先视为普通按钮赋ID ImageList中Add的图为资源视图新建的CBitmap 是个空图 SetButtonText对应的按钮文本也为空格 然后m_toolbar.GetToolBarCtrl().EnableButton(ID_BUTTONS, FALSE);将对应的按钮禁用即可 ID_BUTTONS是第一个按钮的ID值 UINT nArray[21]; for (int i 0; i &l…

burpSuitPro破解安装教程

1、在解压后&#xff0c;如第一次使用BP请先运行 激活脚本 2、启动激活程序后点击 Run &#xff0c;运行Burp 然后将 License 里面的值复制到 Burp的 key 输入框里&#xff0c;点击 Next &#xff1a; 3、接下来我们要选择使用手动激活 点击 Manual activation 4、将如下输入…

Centos和redhat桥接模式下固定第二个ip地址为可查

这里我们以centos为例子&#xff0c;redhat与其同理 第一步&#xff1a;进入到镜像network-scripts/目录下 cd /etc/sysconfig/network-scripts 第二步&#xff1a; 输入ls查看自己启用的网卡名字并进行编辑&#xff0c;一般centos默认使用的网卡是idcfg-ens33 第三步&…

simulink 实现51单片机流水灯 及代码形式优化

目录 流水灯 代码形式 流水灯 需求&#xff1a;先左移 再右移 自己的 代码形式 2021a版本

pd虚拟机 Parallels Desktop ,让你能够在Mac电脑上同时运行Windows和macOS,简直太棒了!

最近我发现了一款软件——Parallels Desktop&#xff0c;它让我能够在Mac电脑上同时运行Windows和macOS&#xff0c;简直太棒了&#xff01;我想向大家推荐这款软件&#xff0c;因为它为我的工作和生活带来了巨大的便利和乐趣。 永久访问 https://www.hereitis.cn/soft/Paralle…

Linux开发工具【git】

Linux开发工具【git】 git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。也是林纳斯托瓦兹(Linus Torvalds)为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件&#xff0c;git 的诞生&#xff0c;让我们可以对代…

【Java】一只小菜坤的编程题之旅【2】

文章目录 1丶丑数2、各位相加3丶搜索插入位置4丶第一个错误的版本 1丶丑数 因为丑数只能被2&#xff0c;3&#xff0c;5整除&#xff0c;所以让n依次去除2&#xff0c;3&#xff0c;5&#xff0c;如果最后是n为1&#xff0c;就说明是丑数。 class Solution {public boolean is…

MySQL表的导入导出

目录 导出数据 导出数据语法 导入数据 导入数据语法 有时需要将MySQL中的数据导出到外部存储文件中 MySQL中的数据可以被导出成 sql文本文件xml文件html文件 同样的 该类文件也可以导入到MySQL数据库中 导出数据 导出数据语法 select columnlist from table where co…

typescript环境搭建

安装vscode 安装tsc npm install -g typescript --registryhttps://registry.npm.taobao.org查看是否安装成功 tsc --version管理员身份启动powershell bash set-ExecutionPolicy RemoteSigned

部署 Zabbix 集中监控系统

zabbix 概述 Zabbix 是一个基于WEB界面的提供分布式系统监控以及网络监控功能的企业级开源监控套件 服务端端口&#xff1a;10051 客户端端口&#xff1a;10050 Zabbix 主要功能 主机的性能监控、网络设备性能监控、数据库性能监控、多种告警方式、详细报表图表绘制 Zab…

电压放大器如何驱动电容性负载的

电容性负载是指由电容器或一组电容器组成的负载。在电路中&#xff0c;当电容性负载与电压放大器相连时&#xff0c;电容器下极板的电位将随着输入信号的变化而变化&#xff0c;从而改变输出电压。电压放大器是一种常见的电路&#xff0c;它能够将输入电压信号放大到较大的幅度…

YOLOv5解析 | 第三篇:yolov5s.yaml文件详解

YOLOv5配置了4种不同大小的网络模型,分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中 YOLOv5s 是网络深度和宽度最小但检测速度最快的模型,其他3种模型都是在YOLOv5s的基础上不断加深、加宽网络使得网络规模扩大,在增强模型检测性能的同时增加了计算资源和速度消耗。出于对…

k8s kubeadmin方式安装部署

1、节点至少2C2G. 2、首先安装docker&#xff0c; sudo yum install -y docker-ce docker-ce-cli containerd.io#以下是在安装k8s使用的docker版本。注意保持一致 yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6sudo mkdir -p /etc/docker su…

基于iTOP-RK3568开发板进行讲解,本次更新第十一期主要讲解pinctrl子系统共计16讲

1.课cheng规划 2.pinctrl子系统课程引入 3.前置理论-pinctrl_desc结构体.mp4 4.实践-讲解pinctrl_desc结构体实际应用 5.理论&#xff1a;pinctrl子系统三个函数操作集 6.进一步了解rockchip_pinctrl结构体 7.实践&#xff1a;pinctrl子系统三个函数操作集 8.重点&#xff1a;d…

UE4 解决在同一场景播放多个本地视频卡顿的问题(4.27+)

在使用4.27版本开发项目时&#xff0c;需要在同一场景播放多个本地视频&#xff0c;用的是ue自带的播放器&#xff0c;一旦播放的视频多了就会导致卡顿甚至播放不了&#xff0c;查了一下官方文档&#xff0c;虚幻引擎4.27中内置了Bink Media插件&#xff0c;这个插件可以解决这…

Spring MVC 系列1 -- 初识Spring MVC

目录 1. 什么是 Spring MVC&#xff1f; 2. MVC定义 3. 创建SpringMVC项目 ​4. Spring MVC要学习哪些? 1. 什么是 Spring MVC&#xff1f; 官⽅对于 Spring MVC 的描述是这样的&#xff1a; 翻译成中文 从上述定义我们可以得出两个关键信息&#xff1a; 1. Spring MVC 是…

骨传导蓝牙耳机怎么样?盘点当下最流行的几款骨传导耳机

作为耳机资深用户&#xff0c;特别推荐大家使用骨传导耳机&#xff0c;因为骨传导耳机完全不需要入耳&#xff0c;在一定程度上&#xff0c;减少了外耳道和耳膜受损以此保护听力&#xff0c;而且佩戴骨传导耳机时&#xff0c;周围的声音仍然可以听到&#xff0c;避免了因听不到…