滑动窗口算法(C语言描述)
第一种类型:不固定长窗口
问题1:***

C代码1:
#include<stdio.h>
#include<string.h>
#define N 5int min_len(int len1,int len2)
{return (len1 < len2 ? len1:len2);
}int main()
{int target = 0;int num[N];scanf("%d",&target);for(int i = 0;i < N;i++){scanf("%d",&num[i]);}//滑动窗口算法int left = 0;int right = 0;int sum = 0;int len = N+1;while(right < N){sum += num[right];while(sum >= target){sum -= num[left];if(sum < target){len = min_len(len,right-left+1);}left++;}right++;}if(len == N+1){printf("No such subarray exists!");}else{printf("%d",len);}return 0;
}
问题2:*****

C代码2:
#include<stdio.h>
#include<string.h>
#define N 80//向窗口右边添加一个字符,拓宽窗口
void Add_char(char ch,char *window)
{int right = strlen(window);window[right] = ch;
}
//检查窗口字符串是否满足包含字符串t所有字符且数量不少于t
int Is_ok(char *t,char *window)
{int needs[128]={0};int windows[128]={0};int n=0;int w=0;int len1 = strlen(window);int len2 = strlen(t);for(int i=0;i<len1;i++){w = (int)window[i];windows[w]++;}for(int j=0;j<len2;j++){n = (int)t[j];needs[n]++;}for(int k = 0;k < 128;k++){if(needs[k] != 0 && windows[k] < needs[k]){return 0;//不满足条件}}return 1;//满足条件
}/*判断当前满足条件的窗口字符串和满足条件的上一次结果字符串比较谁更短,并更新结果。
注意这里不要单纯的把指针result指向新结果(也就是窗口),因为窗口会随着循环而改变,
这样无法保留做中的正确结果,应该把结果字符串赋值给指针result指向的空间*/
void minlen(char *result,char *window)
{int result_len = strlen(result);int window_len = strlen(window);if(result_len > window_len){for(int i = 0;i <= window_len;i++){result[i] = window[i];}}
}//移除窗口左边第1个字符
void remove_char(char *window)
{int len = strlen(window);for(int i= 0;i < len;i++){window[i] = window[i+1];}
}int main()
{//定义所需字符数组char s[N];//存储字符串schar t[N];//存储字符串tchar window[N]={'\0'};//窗口内的字符串char *result = s;//存储找到的满足条件的最短字符串,这里初始化时将其指向字符串s//输入字符串s和tscanf("%s",s);scanf("%s",t);//定义滑动窗口所需变量int left = 0;//窗口左边界指针int right = 0;//窗口右边界指针int end = strlen(s);//字符串s的长度,窗口滑动的终止点//开始滑动窗口寻找满足条件的最短字符串int flag = 0;while(right < end){Add_char(s[right],window);//拓宽窗口右边界while(Is_ok(t,window)&&left < end)//窗口满足条件,已包含字符串t所有字符且数量也不少{flag = 1;minlen(result,window);//更新最短满足条件子串答案remove_char(window);//移除窗口左边第1个字符left++;//窗口左边界边界向前滑动}right++;}if(flag){printf("%s\n",result);}else{printf("No such string!\n");}return 0;
}
问题3:

C代码3:
和上面一个题目差不多,只不过在这里更新答案要加点条件。
#include<stdio.h>
#include<string.h>//向窗口右边添加一个字符,拓宽窗口
void add_char(int right,char *s,char *window)
{int len = strlen(window);window[len] = s[right];
}//检查窗口字符串是否满足包含字符串t所有字符且数量不少于t
int Is_ok(char *window,char *p)
{int len_w = strlen(window);int len_p = strlen(p);int windows[128]={0};int ps[128]={0};int t=0;for(int i = 0;i<len_w;i++){t = (int)window[i];windows[t]++;}for(int j = 0;j<len_p;j++){t = (int)p[j];ps[t]++;}for(int k = 0;k<128;k++){if(ps[k] != 0&& ps[k] > windows[k]){return 0;}}return 1;}//移除窗口左边第1个字符
void remove_char(char *window)
{int len_w = strlen(window);for(int i=0;i<len_w;i++){window[i] = window[i+1];}}
int main()
{//定义字符数组char s[20101]={'\0'};char p[20101]={'\0'};char win[20101]={'\0'};//输入字符串s和pscanf("%s",s);scanf("%s",p);//滑动窗口求解答案int left = 0;int right = 0;char *window = win;int end = strlen(s);int flag = 0;//检查s中满足条件的子字符串是否大于0int index_arr[1000]={0};int x = 0;while(right < end){add_char(right,s,window);while(Is_ok(window,p)&&left < end)字符串是异位字符串的前提1是两字符字符种类数量一样{int len1 = strlen(window);int len2 = strlen(p);if(len1==len2) //字符串是异位字符串的前提2是两字符字符长度一样{int flag2 = 0;for(int j=0;j<len1;j++){if(window[j] != p[j])//字符串是异位字符串的必要条件是两字符字符不能一模一样{flag2 = 1;}}if(flag2){index_arr[x] = left;x++;flag = 1;}}remove_char(window);left++;}right++;}if(flag){for(int i=0;i<x;i++){if(i != x-1){printf("%d ",index_arr[i]);}else{printf("%d\n",index_arr[i]);}}}else{printf("没有这样匹配的字符串!\n");}return 0;
}
问题4:

C代码4:
和前面有一点不一样,主要是窗口移动不太一样。
#include<stdio.h>
#include<string.h>
#define N 80//向窗口右边添加一个字符,拓宽窗口
void Add_char(char ch,char *window)
{int right = strlen(window);window[right] = ch;
}
//检查窗口字符串是否满足包含字符串t所有字符且数量不少于t
int Is_ok(char *window)
{int windows[128]={0};int w=0;int len1 = strlen(window);for(int i=0;i<len1;i++){w = (int)window[i];windows[w]++;}for(int k = 0;k < 128;k++){if(windows[k] > 1){return 0;//不满足条件}}return 1;//满足条件
}/*判断当前满足条件的窗口字符串和满足条件的上一次结果字符串比较谁更短,并更新结果。
注意这里不要单纯的把指针result指向新结果(也就是窗口),因为窗口会随着循环而改变,
这样无法保留做中的正确结果,应该把结果字符串赋值给指针result指向的空间*/
void maxlen(char *result,char *window)
{int result_len = strlen(result);int window_len = strlen(window);if(result_len < window_len){for(int i = 0;i <= window_len;i++){result[i] = window[i];}}
}//移除窗口左边第1个字符
void remove_char(char *window)
{int len = strlen(window);for(int i= 0;i < len;i++){window[i] = window[i+1];}
}int main()
{//定义所需字符数组char s[N];//存储字符串schar window[N]={'\0'};//窗口内的字符串char result[N]={'\0'};//存储找到的满足条件的最短字符串,这里初始化时将其指向字符串s//输入字符串s和tscanf("%s",s);//定义滑动窗口所需变量int left = 0;//窗口左边界指针int right = 0;//窗口右边界指针int end = strlen(s);//字符串s的长度,窗口滑动的终止点//开始滑动窗口寻找满足条件的最短字符串int flag = 0;while(right < end){Add_char(s[right],window);//拓宽窗口右边界if(Is_ok(window)&&left < end)//窗口满足条件,已包含字符串t所有字符且数量也不少{flag = 1;maxlen(result,window);//更新最短满足条件子串答案}else{remove_char(window);//移除窗口左边第1个字符left++;//窗口左边界边界向前滑动}right++;}if(flag){printf("%d\n",strlen(result));}else{printf("No such string!\n");}return 0;
}
相关文章:
滑动窗口算法(C语言描述)
第一种类型:不固定长窗口 问题1:*** C代码1: #include<stdio.h> #include<string.h> #define N 5int min_len(int len1,int len2) {return (len1 < len2 ? len1:len2); }int main() {int target 0;int num[N];scanf("…...
【已修复】vcruntime140.dll有什么用,vcruntime140.dll缺失如何修复
我是网友,今天非常荣幸能够在这里和大家分享关于电脑找不到vcruntime140.dll无法继续执行代码的解决方法。我相信,在座的许多朋友都曾遇到过这个问题,而今天我将为大家介绍五种有效的解决方法。 首先,让我们来了解一下vcruntime1…...
10月12日,每日信息差
今天是2023年10月12日,以下是为您准备的13条信息差 第一、欧盟投资4.5亿欧元在法国建设电池超级工厂。欧洲投资银行是欧盟的贷款机构,也是世界上最大的跨国银行之一 第二、北京银行推出数字人民币智能合约平台 数字人民币预付资金管理产品在商超场景首…...
网络安全技术(黑客学习)——自学方法
如果你想自学网络安全,首先你必须了解什么是网络安全!,什么是黑客!! 1.无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如 Web 安全技术,既有 Web 渗透2.也有 Web 防…...
引领创新浪潮:“Polygon探寻新技术、新治理、新代币的未来之路!“
熊市是用来建设的,Polygon Labs一直在利用这漫长的几个月来做到这一点。 Polygon 是最常用的区块链之一,每周约有 150 万用户,每天超过 230 万笔交易,以及数千个 DApp,Polygon 最近面临着日益激烈的竞争。虽然从交易数…...
Android 13.0 添加自定义服务,并生成jar给第三方app调用
1.概述 在13.0系统产品定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,而app上层通过调用自定义服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar 给上层app调用,接下来就来分析实现的步骤,然后来实现相关的功能 从而来实现所需要的功能 2. …...
PG14归档失败解决办法archiver failed on wal_lsn
问题描述 昨晚RepmgrPG14主备主库因wal日志撑爆磁盘,删除主库过期wal文件重做备库后上午进行主备状态巡查,主库向备库发送wal文件正常,但是查主库状态时发现显示有1条归档失败的记录。 postgres: archiver failed on 000000010000006F000000…...
YB4014是可以对单节磷酸铁锂电池进行恒流/恒压充电管理的集成电路。
概述: YB4014是可以对单节磷酸铁锂电池进行恒流/恒 压充电管理的集成电路。该器件内部包括功率晶 体管,不需要外部的电流检测电阻和阻流二极管 YB4014只需要极少的外围元器件,非常适合于 便携式应用的领域。热调制电路可以在器件的功 耗比较大…...
STL——查找算法及实例
一 前言 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成。要使用 STL中的算法函数必须包含头文件<algorithm>,对于数值算法须包含<numeric>,<functional>中则定义了一些模板类,用来声明…...
Ant Design Form.List基础用法
使用 Form.List 使用 项目中需要在新增可以多个如图 代码如下 // An highlighted block <Card title"产品信息" bordered{false}><Form.List name"productList" >{(fields, {add, remove}) > (<>{fields.map((field) > (<Ro…...
怎么优化H5让它可以在300ms以内打开?
移动端H5点击300毫秒延迟问题是由于浏览器为了区分单击和双击事件而导致的,通常会在点击后等待300毫秒以查看是否还会发生第二次点击。为解决这个问题,可以采取以下方法: 使用meta标签: 在HTML文档的头部添加以下meta标签来禁用缩放和调整浏览…...
Zabbix安装出现必要条件检查失败
问题描述 今天在某朋友部署新环境的Zabbix时,系统出现如下的检查失败情况。此环境的基础部分不是我负责,而是其它项目共存的PHP环境,也是挺奇怪的。一般来说,不应该将zabbix与其它系统部署在一起,没有条件哪怕时Docke…...
精通Maven的捷径:一文包揽所有必知必学
Maven是每个Java程序都会遇到的包管理工具,今天整理一下Maven的相关知识,从青铜到王者,一文全了解,我们开始吧! 1、maven是什么,为什么存在?项目结构是什么样子,怎么定位jar 官方网…...
SpringCloud溯源——从单体架构到微服务Microservices架构 分布式和微服务 为啥要用微服务
前言 单体架构好好的,为啥要用微服务呢?微服务究竟是啥,怎么来的,有啥优缺点,本篇博客尝试追根溯源,阐述单体应用到分布式,微服务的演变,微服务架构的定义及优缺点,厘清相关的概念。…...
springboot 配置 servlet filter 2
springboot 配置 servlet filter 2 以配置Druid为例 Servlet WebServlet(urlPatterns "/druid/*",initParams {WebInitParam(name "loginUsername", value "admin"),// 登录用户名WebInitParam(name "loginPassword", value …...
前端axios下载导出文件工具封装
使用示例: import { fileDownload } from /utils/fileDownloadfileDownload({ url: process.env.VUE_APP_BASE_URL /statistic/pageList/export, method: post, data: data })工具类: import store from ../store/index import {getAccessToken } fro…...
Web应用防火墙的性能优化技术
Web应用防火墙(WAF)是企业网络安全的重要屏障,其性能直接影响到网络服务的质量和安全。本文详细探讨了WAF性能优化的几种技术,旨在为网络安全专业人员提供实用的参考。 规则优化 1.1 精简规则集 规则评估:定期评估规…...
华为HCIP题库h12-821题库新增30题
901、 (多选题)下面关于BGP中的公认属性的描述,正确的是 A、公认必属性是所有BGP路由器都识别,且必须存在于Updata消息中 B、BGP必须识别所有公认属性 C、公认属性分为公认必遵和可选过渡两种 D、公认任意属性是所有BGP造由器…...
智慧办公数据可视化大屏设计(数据可视化)、大数据、数据大屏、办公数据大屏、办公数据
本次分享的作品是用软件Axure8.0(兼容9和10)制作的智慧办公数据进行的可视化大屏设计,主要是针对办公的综合数据、工位数据、会议室数据、访客数据、能耗数据以及设备智控数据进行可视化数据分析。 1、综合分析:对办公室的整体数据、空气质量…...
echarts实现横轴刻度名倾斜展示,并且解决文字超出部分消失问题
需求背景: xAxis.axisLabel. interval如果不手动设值的话,默认就是‘auto’,会采用标签不重叠的策略间隔显示标签。当数据量特别大的时候,展示出来的刻度标签就会很少,导致用户体验不好。如下图所示: 如果…...
“零关税”为中非合作装上“加速器”
科特迪瓦和加纳的醇香可可、肯尼亚的精品咖啡与鲜润牛油果、南非的清甜柑橘与醇厚红酒……5月1日起,这些“非洲好物”搭乘零关税“直通车”进入中国市场。这一天,中国面向20个不属于最不发达国家的非洲建交国实施零关税、为期2年,从而实现对5…...
Upscayl终极指南:如何用免费AI工具让模糊图片变高清
Upscayl终极指南:如何用免费AI工具让模糊图片变高清 【免费下载链接】upscayl 🆙 Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 你是否曾因照…...
CANN/cann-bench MHA算子API描述
MHA 算子 API 描述 【免费下载链接】cann-bench 评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台࿰…...
5分钟快速上手Vue3思维导图:打造专业级数据可视化应用
5分钟快速上手Vue3思维导图:打造专业级数据可视化应用 【免费下载链接】vue3-mindmap Mindmap component for Vue3 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-mindmap Vue3-Mindmap是一个基于Vue 3和TypeScript构建的现代化思维导图组件,…...
屏蔽壳设计全解:材料选型、接地策略与EMC实战优化
摘要: 在高速数字电路、射频模块及工业通信设备中,电磁干扰(EMI/EMC)往往是产品认证路上的“拦路虎”。屏蔽壳(电磁屏蔽罩)作为抑制辐射骚扰最直接的手段,其材料选择、开孔尺寸、接地方式及结构…...
百度网盘Mac版SVIP破解终极指南:三步解锁高速下载限制
百度网盘Mac版SVIP破解终极指南:三步解锁高速下载限制 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版的龟速下载而烦恼…...
保姆级教程:用YOLOv5 v6.0训练自己的数据集(从环境配置到模型导出)
从零构建工业级YOLOv5 v6.0检测系统:环境配置到模型部署全流程实战 在工业质检、安防监控等场景中,快速构建高精度目标检测系统已成为工程师的核心竞争力。YOLOv5以其卓越的平衡性——兼顾速度与精度、完善的工程化支持,成为落地首选。本文将…...
Linux命令行玩转CAN总线:像查日志一样用grep分析candump实时数据流
Linux命令行玩转CAN总线:像查日志一样用grep分析candump实时数据流 在Linux系统管理领域,日志分析是每个开发者都熟悉的日常操作。当面对CAN总线这样的专业数据流时,其实可以运用同样的思维——将candump视为持续输出的数据源,用g…...
推理服务为什么一上自动 Prompt 优化就开始成本失控:从 Prompt 版本爆炸到在线 A/B 收敛的工程实战
一、自动 Prompt 优化的成本幻觉 不少团队上线推理服务后,发现同一任务换句 Prompt 输出质量可提升 20%。🚀 自动 Prompt 优化因此成了香饽饽——系统同时维护几十个版本在线分流。但两周后账单涨了 40%。⚡️ 问题不在 Prompt,而是版本爆炸把…...
不只是定位:教你用开源GNSS/INS平台玩转多传感器融合与抗干扰
不只是定位:开源GNSS/INS平台的多传感器融合与抗干扰实战指南 在自动驾驶、无人机和机器人领域,精准的定位与导航系统是核心竞争力的体现。传统单一GNSS系统在城市峡谷、电磁干扰等复杂环境下表现往往不尽如人意,而单纯依赖惯性导航系统(INS)…...
