首页 > 其他分享 >122. 滑动窗口最大值(卡码网周赛第二十期(23年用友提前批笔试真题))

122. 滑动窗口最大值(卡码网周赛第二十期(23年用友提前批笔试真题))

时间:2024-06-06 23:31:37浏览次数:24  
标签:卡码 周赛 23 int 最大值 h2 flag num 数组

122. 滑动窗口最大值(卡码网周赛第二十期(23年用友提前批笔试真题))

题目描述

给定一个整数数组 nums 和一个整数 k,k 表示滑动窗口的大小。你需要找出每个滑动窗口中的最大值与最小值的差,并返回这些差的最大值。

输入

数组的长度为 n,1 <= n <= 10000,数组中的每个元素范围为[-10000,10000],滑动窗口大小k的范围为[1,n]。

输出

例如,给定一个字符串 “nums = [1,3,-1,-3,5,3,6,7], k = 3”,表示一个数组和窗口大小 k。对于该数组中的每个窗口,计算最大值与最小值的差,并返回这些差值中的最大值。
在这个例子中,每个窗口的最大值与最小值的差分别为 [4, 6, 8, 8, 3, 4],因此最终返回的结果是 8。

样例输入

nums = [1,3,-1,-3,5,3,6,7], k = 3

样例输出

8

提示

题目输入是一个字符串,需要自己解析为数组和 k 值。

题解1(C++版本)

#include<bits/stdc++.h>
using namespace std;

const int N = 1e4 + 10;
char s[N];
int n, k, a[N], mi[N], mx[N], q1[N], q2[N];

void getMax(){ //队头保存最大值 
	int h1 = 1, t1 = 0; //清空队列
	for(int i = 1; i <= n; i++){
		while(h1 <= t1 && a[q1[t1]] <= a[i]) t1--; //队尾出队 
		q1[++t1] = i; //队尾入队 
		if(q1[h1] < i - k + 1) h1++; //队头出队 
		if(i >= k) { // 使用最值 
			mx[i] = a[q1[h1]];
		}
	} 
}

void getMin(){ //队头保存最小值 
	int h2 = 1, t2 = 0; //清空队列
	for(int i = 1; i <= n; i++){
		while(h2 <= t2 && a[q2[t2]] >= a[i]) t2--; //队尾出队 
		q2[++t2] = i; //队尾入队 
		if(q2[h2] < i - k + 1) h2++; //队头出队 
		if(i >= k) { // 使用最值 
			mi[i] = a[q2[h2]];
		}
	} 
}

void read(){
    scanf("%[^\n]", s + 1); //读取一行字符串,直到读取到换行符为止
	int len = strlen(s + 1);
    int flag = 1, num = 0;
	int i = 1;
	
	for(; i <= len; i++){ // 读取数组中的元素
	    if(s[i] == '[') {
	        continue;
	    }else if(s[i] == ']'){ // 读取最后一个数组元素
	        a[++n] = num * flag;
	        num = 0;
	        flag = 1;
	        break;
	    }
	    if(s[i] == '-'){
	        flag = -1;
	    }else if(s[i] >= '0' && s[i] <= '9'){
	        num = num * 10 + s[i] - '0';
	    }else if(s[i] == ','){ 
	        a[++n] = num * flag;
	        num = 0;
	        flag = 1;
	    }
	}
	
	for(; i <= len; i++){ // 读取k
	    if(s[i] >= '0' && s[i] <= '9'){
	        k = k*10 + s[i] - '0';
	    }
	}
}
int main(){
	read(); // 读取数据
	getMin();getMax();
	int ans = 0;
	for(int i = k; i <= n; i++){
	    ans = max(ans, mx[i] - mi[i]);
	}
	printf("%d\n", ans);
	return 0;
}

标签:卡码,周赛,23,int,最大值,h2,flag,num,数组
From: https://blog.csdn.net/qq_45332149/article/details/139512158

相关文章

  • 5.23
    北京地铁作业2<template><viewclass="container"><viewclass="example"><uni-formsref="form":model="form"labelWidth="80px"><uni-forms-itemlabel="起始站"......
  • 再谈23种设计模式(3):行为型模式(学习笔记)
    23种设计模式的分类表范围\目的创建型模式结构型模式行为型模式类模式工厂方法(类)适配器模板方法、解释器对象模式单例原型抽象工厂建造者代理装饰桥接(对象)适配器外观享元组合策略职责链状态观察者中介者迭代器访问者备忘录命令结构型模式VS行为型模......
  • 再谈23种设计模式(2):结构型模式(趣图解释)
    回顾一下《再谈设计模式—模式23种设计模式总结》23种设计模式的分类表范围\目的创建型模式结构型模式行为型模式类模式工厂方法(类)适配器模板方法、解释器对象模式单例原型抽象工厂建造者代理装饰桥接(对象)适配器外观享元组合策略职责链状态观察者中介者迭......
  • CF1234F Yet Another Substring Reverse
    CF1234FYetAnotherSubstringReverse状压dp+高维前缀和一个很显然的发现是最长子串长度不会超过字符集。那么如果没有这个操作,是很简单的,我们看看多了这个操作意味着什么。对于一个子串,考虑一次翻转对它的影响。在它内部的翻转肯定是没有意义的;我们一定有一个操作能将任意......
  • [GDOUCTF 2023] Shellcode
    [GDOUCTF2023]Shellcoderet2shellcode|shellcodeint__fastcallmain(intargc,constchar**argv,constchar**envp){charbuf[10];//[rsp+6h][rbp-Ah]BYREFsetbuf(stdin,0LL);setbuf(stderr,0LL);setbuf(stdout,0LL);mprotect((&stdout......
  • 高速信号处理卡:523-基于 XCZU15EG的双 FMC通用信号处理板 高速信号处理
    (ZCU102E的pin兼容替代卡)基于XCZU15EG的双FMC通用信号处理板一、板卡概述   本板卡基于XilinxZynqUltrascale+MPSOC系列SOCXCZU15EG-FFVB1156架构,PS端搭载一组64-bitDDR4,容量32Gb,最高可稳定运行在2400MT/s,1路USB3.0接口、1路千兆网络接口、1路DP接口......
  • 界面组件DevExpress Reports v23.2增强用户体验 - 轻松导航Web设计器
    DevExpressReporting是.NETFramework下功能完善的报表平台,它附带了易于使用的VisualStudio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。DevExpressReportsv23.2(我们最近的主要更新)包含了对DevExpressWeb报表设计器的智能......
  • BUUCTF 23~26 wp
    23主动防御首先拼接三段数据,然后与i异或,得到提示然后连续十次base64编码,提示“found”实际上并没有找到flag,而是一个网址回到View-A视图,发现一个交叉引用跟进发现关键字符‘f’,‘g’,逆推出v1,异或得出flag24Transform将输入的flag放进Str,长度为33,如果414040的数据和St......
  • 小米10ultra(IMX350 2000W) 小米11ultra(IMX586 4800W) 超广角放大对比 ISO12233
    拍摄距离ISO12233的打印纸大概半米,室内灯光环境结论:差距比较小,不过也是能看出来的。大概差半级到一级。10u能分辨到4,11u能分辨到4.5。小米10ultra质量:高HEICIMG_20240605_205122.HEIC1.29MB3880x5184 像素  小米11ultra质量:高没用HEIC用的jpgIMG_20240605_2......
  • 【专题】2022-2023中国跨境出口B2C电商报告PDF合集分享(附原数据表)
    报告链接:http://tecdat.cn/?p=32805原文出处:拓端数据部落公众号全球疫情的爆发对于全球经济和消费市场都带来了很大的冲击,特别是在消费者的消费行为和零售市场格局方面发生了重大变革。同时由于全球供应链的重新调整,产业分化现象也加速出现。阅读原文,获取专题报告合集全文,解锁文......