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

同向双指针

长度最小的子数组

力扣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。

http://www.kler.cn/a/401672.html

相关文章:

  • CSS遮罩:mask
  • 关于安卓模拟器或手机设置了BurpSuite代理和安装证书后仍然抓取不到APP数据包的解决办法
  • 内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理
  • 联通光猫(烽火通信设备)改桥接教程
  • 【期权懂|个股期权中的备兑开仓策略是如何进行的?
  • FastAPI 中间件详解:实现高性能 Web 应用的完整指南和实际案例
  • Excel如何把两列数据合并成一列,4种方法
  • 微信小程序 https://thirdwx.qlogo.cn 不在以下 downloadFile 合法域名列表中
  • 自动化仪表故障排除法
  • Ubuntu 系统下,如何清空 swap 分区
  • Swift 宏(Macro)入门趣谈(四)
  • 数据结构(一)链表
  • 【Unity基础】对比Unity中两种粒子系统
  • ubuntu系统中使用docker-compose安装部署docker集群(本地)
  • 聚焦 NLP 和生成式 AI 的创新与未来 基础前置知识点
  • 多目标优化算法:多目标鳗鱼和石斑鱼优化算法(MOEGO)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码
  • vue2+a-table——实现框选选中功能——js技能提升
  • 探索PyMuPDF:Python中的强大PDF处理库
  • 结构体位段+联合和枚举
  • Object.prototype.hasOwnProperty.call(item, key) 作用与用途
  • 2.5D视觉——Aruco码定位检测
  • 前端软件开发质量管控之应用质量 - 关于E2E测试的对象目的及不同方案特性对比(一)
  • ifuse不能挂载App Store下载的包ERROR: InstallationLookupFailed
  • 有关django、python版本、sqlite3版本冲突问题
  • Brave127编译指南 Linux篇-环境配置(五)
  • Python+7z.exe实现自动化压缩与解压