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

滑动窗口算法(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语言描述)

第一种类型&#xff1a;不固定长窗口 问题1&#xff1a;*** C代码1&#xff1a; #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缺失如何修复

我是网友&#xff0c;今天非常荣幸能够在这里和大家分享关于电脑找不到vcruntime140.dll无法继续执行代码的解决方法。我相信&#xff0c;在座的许多朋友都曾遇到过这个问题&#xff0c;而今天我将为大家介绍五种有效的解决方法。 首先&#xff0c;让我们来了解一下vcruntime1…...

10月12日,每日信息差

今天是2023年10月12日&#xff0c;以下是为您准备的13条信息差 第一、欧盟投资4.5亿欧元在法国建设电池超级工厂。欧洲投资银行是欧盟的贷款机构&#xff0c;也是世界上最大的跨国银行之一 第二、北京银行推出数字人民币智能合约平台 数字人民币预付资金管理产品在商超场景首…...

网络安全技术(黑客学习)——自学方法

如果你想自学网络安全&#xff0c;首先你必须了解什么是网络安全&#xff01;&#xff0c;什么是黑客&#xff01;&#xff01; 1.无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&#xff0c;例如 Web 安全技术&#xff0c;既有 Web 渗透2.也有 Web 防…...

引领创新浪潮:“Polygon探寻新技术、新治理、新代币的未来之路!“

熊市是用来建设的&#xff0c;Polygon Labs一直在利用这漫长的几个月来做到这一点。 Polygon 是最常用的区块链之一&#xff0c;每周约有 150 万用户&#xff0c;每天超过 230 万笔交易&#xff0c;以及数千个 DApp&#xff0c;Polygon 最近面临着日益激烈的竞争。虽然从交易数…...

Android 13.0 添加自定义服务,并生成jar给第三方app调用

1.概述 在13.0系统产品定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,而app上层通过调用自定义服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar 给上层app调用,接下来就来分析实现的步骤,然后来实现相关的功能 从而来实现所需要的功能 2. …...

PG14归档失败解决办法archiver failed on wal_lsn

问题描述 昨晚RepmgrPG14主备主库因wal日志撑爆磁盘&#xff0c;删除主库过期wal文件重做备库后上午进行主备状态巡查&#xff0c;主库向备库发送wal文件正常&#xff0c;但是查主库状态时发现显示有1条归档失败的记录。 postgres: archiver failed on 000000010000006F000000…...

YB4014是可以对单节磷酸铁锂电池进行恒流/恒压充电管理的集成电路。

概述&#xff1a; YB4014是可以对单节磷酸铁锂电池进行恒流/恒 压充电管理的集成电路。该器件内部包括功率晶 体管&#xff0c;不需要外部的电流检测电阻和阻流二极管 YB4014只需要极少的外围元器件&#xff0c;非常适合于 便携式应用的领域。热调制电路可以在器件的功 耗比较大…...

STL——查找算法及实例

一 前言 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成。要使用 STL中的算法函数必须包含头文件<algorithm>&#xff0c;对于数值算法须包含<numeric>&#xff0c;<functional>中则定义了一些模板类&#xff0c;用来声明…...

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毫秒延迟问题是由于浏览器为了区分单击和双击事件而导致的&#xff0c;通常会在点击后等待300毫秒以查看是否还会发生第二次点击。为解决这个问题&#xff0c;可以采取以下方法&#xff1a; 使用meta标签: 在HTML文档的头部添加以下meta标签来禁用缩放和调整浏览…...

Zabbix安装出现必要条件检查失败

问题描述 今天在某朋友部署新环境的Zabbix时&#xff0c;系统出现如下的检查失败情况。此环境的基础部分不是我负责&#xff0c;而是其它项目共存的PHP环境&#xff0c;也是挺奇怪的。一般来说&#xff0c;不应该将zabbix与其它系统部署在一起&#xff0c;没有条件哪怕时Docke…...

精通Maven的捷径:一文包揽所有必知必学

Maven是每个Java程序都会遇到的包管理工具&#xff0c;今天整理一下Maven的相关知识&#xff0c;从青铜到王者&#xff0c;一文全了解&#xff0c;我们开始吧&#xff01; 1、maven是什么&#xff0c;为什么存在&#xff1f;项目结构是什么样子&#xff0c;怎么定位jar 官方网…...

SpringCloud溯源——从单体架构到微服务Microservices架构 分布式和微服务 为啥要用微服务

前言 单体架构好好的&#xff0c;为啥要用微服务呢&#xff1f;微服务究竟是啥&#xff0c;怎么来的&#xff0c;有啥优缺点&#xff0c;本篇博客尝试追根溯源&#xff0c;阐述单体应用到分布式&#xff0c;微服务的演变,微服务架构的定义及优缺点&#xff0c;厘清相关的概念。…...

springboot 配置 servlet filter 2

springboot 配置 servlet filter 2 以配置Druid为例 Servlet WebServlet(urlPatterns "/druid/*",initParams {WebInitParam(name "loginUsername", value "admin"),// 登录用户名WebInitParam(name "loginPassword", value …...

前端axios下载导出文件工具封装

使用示例&#xff1a; import { fileDownload } from /utils/fileDownloadfileDownload({ url: process.env.VUE_APP_BASE_URL /statistic/pageList/export, method: post, data: data })工具类&#xff1a; import store from ../store/index import {getAccessToken } fro…...

Web应用防火墙的性能优化技术

Web应用防火墙&#xff08;WAF&#xff09;是企业网络安全的重要屏障&#xff0c;其性能直接影响到网络服务的质量和安全。本文详细探讨了WAF性能优化的几种技术&#xff0c;旨在为网络安全专业人员提供实用的参考。 规则优化 1.1 精简规则集 规则评估&#xff1a;定期评估规…...

华为HCIP题库h12-821题库新增30题

901、 &#xff08;多选题&#xff09;下面关于BGP中的公认属性的描述&#xff0c;正确的是 A、公认必属性是所有BGP路由器都识别&#xff0c;且必须存在于Updata消息中 B、BGP必须识别所有公认属性 C、公认属性分为公认必遵和可选过渡两种 D、公认任意属性是所有BGP造由器…...

智慧办公数据可视化大屏设计(数据可视化)、大数据、数据大屏、办公数据大屏、办公数据

本次分享的作品是用软件Axure8.0&#xff08;兼容9和10&#xff09;制作的智慧办公数据进行的可视化大屏设计&#xff0c;主要是针对办公的综合数据、工位数据、会议室数据、访客数据、能耗数据以及设备智控数据进行可视化数据分析。 1、综合分析:对办公室的整体数据、空气质量…...

echarts实现横轴刻度名倾斜展示,并且解决文字超出部分消失问题

需求背景&#xff1a; xAxis.axisLabel. interval如果不手动设值的话&#xff0c;默认就是‘auto’&#xff0c;会采用标签不重叠的策略间隔显示标签。当数据量特别大的时候&#xff0c;展示出来的刻度标签就会很少&#xff0c;导致用户体验不好。如下图所示&#xff1a; 如果…...

【实战】从理论到代码:用Python实现相位一致性特征提取

1. 相位一致性特征提取的核心原理 相位一致性&#xff08;Phase Congruency&#xff09;是计算机视觉领域一种强大的特征提取方法&#xff0c;它从根本上改变了传统边缘检测的思路。我第一次接触这个概念是在处理一组光照条件差异很大的工业检测图像时&#xff0c;当时用Sobel和…...

从实验室到生活场景:近红外脑成像(fNIRS)如何重塑认知研究边界

1. 从实验室到客厅&#xff1a;fNIRS如何打破认知研究的围墙 十年前我第一次接触近红外脑成像设备时&#xff0c;它还是个需要固定在三脚架上的"庞然大物"&#xff0c;被试必须像雕塑般保持静止。如今看着学生戴着LUMO设备在操场自由活动时采集数据&#xff0c;这种技…...

PCL (Matlab)拟合椭球

一、椭球点云数学模型二、PCL生成点云int main() {// 生成椭球点云 噪声pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);// 椭球参数float a 2.0f; // x轴float b 1.5f; // y轴float c 1.0f; // z轴int N 20000;// 随机数…...

Arduino-IRremote代码调试技巧:10个高效解决开发难题的方法

Arduino-IRremote代码调试技巧&#xff1a;10个高效解决开发难题的方法 【免费下载链接】Arduino-IRremote Infrared remote library for Arduino: send and receive infrared signals with multiple protocols 项目地址: https://gitcode.com/gh_mirrors/ar/Arduino-IRremot…...

越擎科技发布机器人离线编程软件应用白皮书,阐述机器人装配工艺规划、离线编程与虚拟调试方案的原理及优势

摘要&#xff1a;越擎科技针对机器人复杂产品装配的应用场景&#xff0c;打造全国产的机器人离线编程软件iRobotCAM&#xff0c;可以快速的提取装配约束关系并进行装配工艺规划&#xff0c;并编写机器人程序及快速仿真&#xff0c;提升装配过程的精度及编程效率。 根据艾瑞咨询…...

App 测试用例覆盖率提升检查清单

App 测试用例覆盖率提升检查清单 核心用途&#xff1a;核对现有测试用例&#xff0c;快速找出「需求、功能、非功能、移动端特有场景」的覆盖遗漏点&#xff0c;适配 App UI 自动化手动测试&#xff0c;兼顾 PO 模型、数据驱动、各类用例设计方法&#xff08;等价类/边界值等&a…...

别等电脑挂了后悔,教你现在就查看Bitlocker密钥

网管小贾 / sysadm.cc陈主任晃了晃脑袋&#xff0c;皱着眉冲着刘晓白说道&#xff1a;“简历我看过了&#xff0c;就算请我吃饭&#xff0c;恐怕也很难办啊&#xff01;” 刘晓白则一呲牙&#xff1a;“我说老舅&#xff0c;要进你们公司&#xff0c;还不是您一句话的事儿嘛&am…...

影刀RPA实战:用Python字符串处理提升自动化效率(附5个常用脚本)

影刀RPA实战&#xff1a;5个Python字符串处理脚本解决自动化难题 在影刀RPA的自动化流程中&#xff0c;字符串处理就像流水线上的精密工具&#xff0c;直接决定了数据处理的准确性和效率。当我们需要从混乱的日志中提取关键信息、清洗客户提交的表格数据或转换不同系统的文本格…...

一站式屏幕神器eSearch:如何5分钟打造你的智能工作流?

一站式屏幕神器eSearch&#xff1a;如何5分钟打造你的智能工作流&#xff1f; 【免费下载链接】eSearch 截屏 离线OCR 搜索翻译 以图搜图 贴图 录屏 万向滚动截屏 屏幕翻译 Screenshot Offline OCR Search Translate Search for picture Paste the picture on the screen Scree…...

主体代码分析

一、整体架构分析这个程序是一个图片管理工具&#xff0c;采用MVC模式的变体&#xff0c;分为&#xff1a;UI层&#xff1a;界面定义&#xff08;ui_image_manager.py&#xff0c;由Qt Designer生成&#xff09;逻辑层&#xff1a;当前文件的业务逻辑业务层&#xff1a;busines…...