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

同向双指针

长度最小的子数组

力扣209

#define MIN(a, b) ((b) < (a) ? (b) : (a))
int minSubArrayLen(int target, int* nums, int numsSize)
{int ans = numsSize + 1;int left = 0;int right = 0;int sum = 0;for (right = 0; right < numsSize; right++){sum += nums[right];while (sum - nums[left++] >= target){sum -= nums[left++];}if (sum >= target){ans = MIN(numsSize + 1, right - left + 1);}}return ans <= numsSize ? ans : 0;
}

枚举右下标同时右移左下标

以下是对这段代码的解析:

一、宏定义部分

  1. #define MIN(a, b) ((b) < (a)? (b) : (a))
    • 这是一个宏定义,用于求两个数中的最小值。它接受两个参数ab,然后通过三目运算符? :来判断,如果b小于a,就返回b,否则返回a。这种宏定义在代码中可以方便地用于比较两个值的大小并获取较小值。

二、函数minSubArrayLen部分

  1. 变量初始化
    • int ans = numsSize + 1;:这里初始化ansnumsSize + 1,它将用于记录满足条件的子数组的最小长度。初始化为numsSize + 1是因为实际的最小长度不会超过numsSize,这样初始化方便后续比较更新。
    • int sum = 0;:用于记录当前子数组的元素总和,初始化为0。
    • int left = 0;int right = 0;:这两个变量分别作为滑动窗口(子数组)的左右端点,初始时都指向数组的起始位置。
  2. 外层for循环(枚举子数组右端点)
    • for (right = 0; right < numsSize; right++):这个循环的目的是枚举子数组的右端点。每次循环,right指针都会向右移动一位。
    • 在循环内部,首先执行sum += nums[right];,这是将当前right指针指向的元素加入到子数组的总和sum中。
  3. 内层while循环(缩小子数组长度)
    • while (sum - nums[left] >= target):这个循环的目的是在当前子数组总和大于等于target时,尽量缩小子数组的长度。通过不断地将左端点left向右移动(sum -= nums[left++];),来减去子数组最左边的元素,直到子数组总和小于target为止。
  4. 更新最小长度
    • if (sum >= target):当子数组总和大于等于target时,通过ans = MIN(ans, right - left + 1);来计算当前子数组的长度(right - left + 1),并使用之前定义的MIN宏来获取当前长度和之前记录的最小长度ans中的较小值,从而更新ans
  5. 函数返回值
    • return ans <= numsSize? ans : 0;:最后,函数返回ans。如果ans小于等于numsSize,说明找到了满足条件的子数组,直接返回ans;如果ans大于numsSize,则表示没有找到满足条件的子数组,返回0。

相关文章:

同向双指针

长度最小的子数组 力扣209 #define MIN(a, b) ((b) < (a) ? (b) : (a)) int minSubArrayLen(int target, int* nums, int numsSize) {int ans numsSize 1;int left 0;int right 0;int sum 0;for (right 0; right < numsSize; right){sum nums[right];while (su…...

小鹏汽车大数据面试题及参考答案

抽象类与接口的区别是什么? 抽象类是一种不能被实例化的类,它可以包含抽象方法和非抽象方法。抽象方法是没有具体实现的方法,必须在子类中被实现。抽象类主要用于为一组相关的类提供一个通用的模板,子类可以继承抽象类并实现其中的抽象方法,也可以使用抽象类中的非抽象方法…...

华为再掀技术革新!超薄膜天线设计路由器首发!

随着Wi-Fi技术的不断进步&#xff0c;新一代的Wi-Fi 7路由器凭借其高速率、低延迟、更稳定的性能受到了广泛关注。它能够更好地满足现代家庭对网络性能的高要求&#xff0c;带来更加流畅、高效的网络体验。9月24日&#xff0c;华为在其秋季全场景新品发布会上推出了全新Wi-Fi 7…...

CREO TOOLKIT二次开发学习之字符转换

在tk中&#xff0c;有很多都是可以直接强制转换的&#xff0c;本文章只列举字符相关的转换。 不建议使用tk官方手册的函数进行转换&#xff0c;因此下文均以原生c进行举例。 //double转wstring wstring a; double b; ato_wstring(b);//wstring转double wstring wstr L"…...

vmware虚拟机安装Windows11提示电脑不符合要求?

vmware虚拟机安装Win11提示电脑不符合要求&#xff1f; 安装问题能进入选择语言界面&#xff0c;请看这不能进入选择语言界面&#xff0c;请看这 安装问题 Vmware虚拟机安装Windows11时提示电脑不符合要求&#xff0c;如下&#xff1a; 修改了虚拟机的硬件配置还是不行&#x…...

【金融风控项目-08】:特征构造

文章目录 1.数据准备1.1 风控建模特征数据1.2 人行征信数据1.3 据之间的内在逻辑 2 样本设计和特征框架2.1 定义观察期样本2.2 数据EDA(Explore Data Analysis)2.3 梳理特征框架 3 特征构造3.1 静态信息和时间截面特征3.2 未来信息问题3.2.1 未来信息案例3.2.2 时间序列特征的未…...

计算机网络 (2)计算机网络的类别

计算机网络的类别繁多&#xff0c;根据不同的分类原则&#xff0c;可以得到各种不同类型的计算机网络。 一、按覆盖范围分类 局域网&#xff08;LAN&#xff09;&#xff1a; 定义&#xff1a;局域网是一种在小区域内使用的&#xff0c;由多台计算机组成的网络。覆盖范围&#…...

10.《滑动窗口篇》---②长度最小的子数组(中等)

有了上一篇的基础。这道题我们就可以轻易分析可以使用滑动窗口来解决了 方法一&#xff1a;滑动窗口 这里注意 ret 在while循环外部更新 在 while 外部更新 ret&#xff0c;确保窗口在满足条件后再计算长度&#xff0c;避免错误计入正在调整中的窗口长度。 class Solution {pub…...

java的强,软,弱,虚引用介绍以及应用

写在前面 本文看下Java的强&#xff0c;软&#xff0c;弱&#xff0c;虚引用相关内容。 1&#xff1a;各种引用介绍 顶层类是java.lang.ref.Reference,注意是一个抽象类&#xff0c;而不是接口&#xff0c;其中比较重要的引用队列ReferenceQueue就在该类中定义&#xff0c;子…...

STL-stack栈:P1981 [NOIP2013 普及组] 表达式求值

这个题用的STL-栈来做 题目来源&#xff1a;洛谷 相关知识 [NOIP2013 普及组] 表达式求值 题目背景 NOIP2013 普及组 T2 题目描述 给定一个只包含加法和乘法的算术表达式&#xff0c;请你编程计算表达式的值。 输入格式 一行&#xff0c;为需要你计算的表达式&#xff…...

Java使用stream进行分组汇总失效问题

背景 在当前项目的开发任务中需要定制财务报表导出功能&#xff0c;格式比较特殊使用了VM。在汇总数据的过程中使用了stream.collect 进行分组汇总。在测试的过程中发现分组失败&#xff0c;最终原因是对象的对比方式问题&#xff0c;collect是根据对象对比的所以需要重写equa…...

VMWare虚拟机安装华为欧拉系统

记录一下安装步骤&#xff1a; 1.在vmware中创建一个新的虚拟机&#xff0c;步骤和创建centos差不多 2.启动系统 具体的看下图&#xff1a; 启动虚拟机 耐心等待 等待进度条走完重启系统就完成了...

阿里云轻量应用服务器可以用在哪些场景呢

在数字化转型的浪潮中&#xff0c;中小企业面临着如何快速、高效地上云的挑战。阿里云轻量应用服务器&#xff08;SWAS&#xff09;作为一款专为中小企业设计的云服务产品&#xff0c;提供了简单易用、经济实惠的解决方案&#xff0c;助力企业轻松实现云端部署&#xff0c;赋能…...

OrangePi 5plus yolov5 部署全过程

准备工作 一、下载用户手册 下载-Orange Pi官网-香橙派&#xff08;Orange Pi&#xff09;开发板,开源硬件,开源软件,开源芯片,电脑键盘 里面有详细的镜像烧录教程和桌面使用等 二、镜像下载 准备一张TF卡&#xff08;32G以上&#xff09;&#xff0c;插入电脑&#xff0c…...

Rust中::和.的区别

在 Rust 中&#xff0c;:: 和 . 是两种常用的操作符&#xff0c;它们的作用和语法用途不同。以下是详细的对比和解释&#xff1a; 1. ::&#xff08;双冒号&#xff09; :: 是 路径操作符&#xff0c;主要用于访问模块、结构体、枚举、函数、常量等的命名空间中的成员。 主要…...

集群聊天服务器(7)数据模块

目录 Mysql数据库代码封装头文件与源文件 Mysql数据库代码封装 业务层代码不要直接写数据库&#xff0c;因为业务层和数据层的代码逻辑也想完全区分开。万一不想存储mysql&#xff0c;想存redis的话&#xff0c;就要改动大量业务代码。解耦合就是改起来很方便。 首先需要安装m…...

VS Code 更改背景颜色

我们的 VS code 默认是 黑色&#xff0c;这个颜色在有光的情况下&#xff0c;个人感觉反光比较严重。 所以换成白色了。 步骤&#xff1a; 选择 File -> Preferences -> Settings Workbench -> Appearance -> Color Theme -> 选择喜欢的颜色 选择后会变为你选…...

OpenAI 助力数据分析中的模式识别与趋势预测

数据分析师的日常工作中&#xff0c;发现数据中的隐藏模式和预测未来趋势是非常重要的一环。借助 OpenAI 的强大语言模型&#xff08;如 GPT-4&#xff09;&#xff0c;我们可以轻松完成这些任务&#xff0c;无需深厚的编程基础&#xff0c;也能快速上手。 在本文中&#xff0…...

IDM扩展添加到Edge浏览器

IDM扩展添加到Edge浏览器 一般情况下&#xff0c;当安装IDM软件后&#xff0c;该软件将会自动将IDM Integration Module浏览器扩展安装到Edge浏览器上&#xff0c;但在某些情况下&#xff0c;需要我们手动安装&#xff0c;以下为手动安装步骤 手动安装IDM扩展到Edge浏览器 打…...

【SpringBoot】26 实体映射工具(MapStruct)

Gitee 仓库 https://gitee.com/Lin_DH/system 介绍 现状 为了让应用程序的代码更易于维护&#xff0c;通常会将项目进行分层。在《阿里巴巴 Java 开发手册》中&#xff0c;推荐分层如下图所示&#xff1a; 每层都有对应的领域模型&#xff0c;即不同类型的 Bean。 DO&…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...