优选算法——滑动窗口2

优选算法——滑动窗口2

优选算法——滑动窗口

1.1004. 最大连续1的个数 III

题目描述

在这里插入图片描述

思路分析

这道题的核心是:找一个最长的子数组,其中最多包含 k 个 0

经典的 滑动窗口 问题。

为什么用滑动窗口?

  • 我们需要连续区间 → 滑动窗口天然适合
  • 窗口内维护「0 的个数 ≤ k」这个约束
  • 窗口扩张:右指针右移,遇到 0 就计数
  • 窗口收缩:当 0 的个数超过 k,左指针右移直到满足条件

算法流程

1. 初始化:left = 0, zeroCount = 0, maxLen = 0 2. 遍历数组,right 指针右移: - 如果 nums[right] == 0,zeroCount++ - 当 zeroCount > k 时,收缩左边界: - 如果 nums[left] == 0,zeroCount-- - left++ - 更新 maxLen = max(maxLen, right - left + 1) 3. 返回 maxLen 
在这里插入图片描述

代码实现

classSolution{public:intlongestOnes(vector<int>& nums,int k){int zero=0;int ret=0;for(int left=0,right=0;right<nums.size();right++){if(nums[right]==0) zero++;//进窗口while(zero>k)//判断if(nums[left++]==0) zero--;//出窗口 ret=max(ret,right-left+1);}return ret;}};

2.1658. 将 x 减到 0 的最小操作数

题目描述

在这里插入图片描述

给定一个整数数组 nums 和整数 x。每次操作可以从数组最左端或最右端移除一个元素,使 x 减去该元素的值。返回将 x 恰好减到 0 的最小操作数,无法实现则返回 -1。

示例:

输入:nums = [1,1,4,2,3], x = 5 输出:2 解释:移除最右端的 3,再移除最右端的 2,x = 5 - 3 - 2 = 0 

思路分析

逆向思维 + 滑动窗口

从两端取数 → 等价于找一个中间连续子数组,其和为 total - x

  • 设数组总和为 sum
  • 问题转化为:找最长的子数组,使其和为 sum - x
  • 最小操作数 = n - 最长子数组长度

为什么?

  • 两端取走的元素和 = x
  • 剩下中间的元素和 = sum - x
  • 操作数最少 → 中间剩余最长

算法流程

1. 计算 target = sum(nums) - x 2. 如果 target &lt; 0,返回 -1(总和都不够减) 3. 滑动窗口找和为 target 的最长子数组 4. 返回 n - maxLen(若 maxLen 有效) 
在这里插入图片描述

代码实现

classSolution{public:intminOperations(vector<int>& nums,int x){int sum =0;int cmp=0;int ret=-1;for(auto e :nums){ sum+=e;}int target=sum-x;if(target<0)return-1;for(int left=0,right=0;right<nums.size();right++){ cmp+=nums[right];//进窗口while(cmp>target)//判断{ cmp-=nums[left++];//出窗口}if(cmp==target)//更新结果 ret=max(ret,right-left+1);}if(ret==-1)return ret;elsereturn nums.size()-ret;}};

Read more

Flutter 三方库 crypto 的鸿蒙化适配指南 - 实现具备工业级哈希算法与消息摘要计算的安全底座、支持端侧数据校验与数字签名实战

Flutter 三方库 crypto 的鸿蒙化适配指南 - 实现具备工业级哈希算法与消息摘要计算的安全底座、支持端侧数据校验与数字签名实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 crypto 的鸿蒙化适配指南 - 实现具备工业级哈希算法与消息摘要计算的安全底座、支持端侧数据校验与数字签名实战 前言 在进行 Flutter for OpenHarmony 开发时,确保数据的一致性与安全性是业务上线的先决条件。无论是对用户密码进行加盐哈希存储、验证下载文件的完整性,还是为分布式信令生成 API 签名,都离不开严谨的加密算法支持。crypto 是 Dart 官方生态中用于处理哈希与摘要的核心工具库。本文将探讨如何在鸿蒙端构建极致、稳健的加密算法基石。 一、原直观解析 / 概念介绍 1.1 基础原理 该库提供了一系列纯 Dart 实现的一致性哈希算法(Hash Algorithims)。它通过将任意长度的输入映射为固定长度的二进制摘要(Digest)。支持流式处理(Chunked processing),即允许在读取大文件时分批次泵送数据。在鸿蒙端。它是“

By Ne0inhk

ChatGPT Python API 实战:如何高效集成与优化对话流

ChatGPT Python API 实战:如何高效集成与优化对话流 在将ChatGPT的智能融入应用时,很多开发者都卡在了“效率”这一关。直接调用官方API,一个简单的问答,从发送请求到收到回复,平均响应时间可能在1.5秒到3秒之间(测试环境:单次请求,网络延迟约50ms,gpt-3.5-turbo模型)。对于需要实时交互的场景,比如智能客服、语音助手或者需要高频对话的游戏NPC,这样的延迟会严重破坏用户体验。更不用说,随着对话轮次增加,如何管理不断膨胀的上下文(Context),也成了性能和成本的隐形杀手。 今天,我们就来深入实战,拆解ChatGPT Python API集成中的效率瓶颈,并分享一套从代码到架构的优化方案。目标很明确:让对话更流畅,让资源更节省。 1. 同步 vs 异步:从阻塞到并发的性能飞跃 最直接的调用方式是使用requests库进行同步调用。这种方式简单,但每个请求都会阻塞主线程,直到收到响应。在需要处理多个用户或批量生成内容时,效率极低。 相比之下,异步调用是提升吞吐量的关键。

By Ne0inhk
Python系列Bug修复:超详细解决 Server disconnected 错误实战指南

Python系列Bug修复:超详细解决 Server disconnected 错误实战指南

Python系列Bug修复:超详细解决 Server disconnected 错误实战指南 摘要:在Python网络编程中,Server disconnected错误是开发者最常遇到的噩梦之一。无论是使用requests进行同步HTTP请求,还是使用aiohttp进行异步高并发爬取,亦或是调用OpenAI API、LangChain等第三方服务,都可能遭遇RemoteDisconnected、ServerDisconnectedError、Connection aborted等变种错误。本文将深入剖析这一问题的技术本质,提供从网络层、传输层到应用层的12+种解决方案,涵盖连接池优化、重试机制、代理配置、SSL/TLS调优等实战技巧,助你构建高可用的Python网络客户端。 文章目录 * Python系列Bug修复:超详细解决 `Server disconnected` 错误实战指南 * 一、开发环境与错误场景 * 1.1 开发环境配置 * 1.2 典型报错场景 * 1.3 错误本质剖析 * 二、核心原理:HTTP连接生命周期与断开

By Ne0inhk