209. 长度最小的子数组

server/2025/1/23 15:51:37/

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的
子数组
[numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

C++

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int result=INT_MAX;int i=0;int length=0;int sum=0;for( int j=0;j<nums.size();j++ ){sum=sum+nums[j];while( sum>=target ){length=j-i+1;sum=sum-nums[i++];result=min(result,length);}}return result==INT_MAX?0:result;}
};

时间复杂度

O ( N ) O(N) O(N)

空间复杂度

O ( 1 ) O(1) O(1)

C++

class Solution {
public:/**void print(vector<int>& nums){printf("\n");for(int i=0;i<nums.size();i++){printf(" %d ",nums[i]);}printf("\n");}**/void swap(vector<int>& nums,int i,int j){int temp=nums[i];nums[i]=nums[j];nums[j]=temp;}void sortNums(vector<int>& nums,int s,int e){if( s>e ){return;}int i=s;int j=e;int k=nums[s];while( i!=j ){while( j>i && nums[j]>=k ){j--;}swap(nums,i,j);while( j>i && nums[i]<=k ){i++;}swap(nums,i,j);}sortNums(nums,s,i-1);sortNums(nums,i+1,e);}int minSubArrayLen(int target, vector<int>& nums) {print(nums);sortNums(nums,0,nums.size()-1);print(nums);int i=nums.size()-1;int count=0;while( i>-1  ){//printf("target:%d_i:%d_nums[i]:%d.count:%d.\n",target,i,nums[i],count);if( target==nums[i] ){count++;break;}else if( target>nums[i] ){int leaveNum=target-nums[i];if(0==i && leaveNum>nums[i]){count=0;break;}if(0==i && leaveNum<nums[i]){count=0;break;}if( (i-1)>=0 && leaveNum>=nums[i-1] ){target=target-nums[i];count++;i--;continue;}if( (i-1)>=0 && leaveNum<nums[i-1] ){count++;count++;break;}}else{//target<nums[i]count++;break;}}return count;}
};

Java

class Solution {public int minSubArrayLen(int target, int[] nums) {int result=Integer.MAX_VALUE;int i=0;int length=0;int sum=0;for( int j=0;j<nums.length;j++ ){sum=sum+nums[j];while( sum>=target ){length=j-i+1;sum=sum-nums[i++];result=Math.min(result,length);}}return result==Integer.MAX_VALUE?0:result;}
}

时间复杂度

O ( N ) O(N) O(N)

空间复杂度

O ( 1 ) O(1) O(1)

Python

python">class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:result=float('inf');i=0;length=0;sum=0;for j in range(0,len(nums)):sum=sum+nums[j];while sum>=target:length=j-i+1;sum=sum-nums[i];i=i+1;result=min(result,length);if result==float('inf'):return 0;else:return result;

时间复杂度

O ( N ) O(N) O(N)

空间复杂度

O ( 1 ) O(1) O(1)


http://www.ppmy.cn/server/160780.html

相关文章

WPF 复杂页面布局及漂亮 UI 界面设计全解析

在 WPF 开发领域&#xff0c;打造一个既具备复杂功能又拥有美观 UI 界面的应用程序是众多开发者追求的目标。复杂页面布局与漂亮的 UI 设计不仅能提升用户体验&#xff0c;还能展现应用的专业性和独特性。本文将深入探讨如何在 WPF 中实现复杂页面布局以及设计出令人眼前一亮的…

STL--list(双向链表)

目录 一、list 对象创建 1、默认构造函数 2、初始化列表 3、迭代器 4、全0初始化 5、全值初始化 6、拷贝构造函数 二、list 赋值操作 1、赋值 2、assign&#xff08;迭代器1&#xff0c;迭代器2&#xff09; 3、assign&#xff08;初始化列表&#xff09; 4、assig…

SQL表间关联查询详解

简介 本文主要讲解SQL语句中常用的表间关联查询方式&#xff0c;包括&#xff1a;左连接&#xff08;left join&#xff09;、右连接&#xff08;right join&#xff09;、全连接&#xff08;full join&#xff09;、内连接&#xff08;inner join&#xff09;、交叉连接&…

开源模型应用落地-FastAPI-助力模型交互-进阶篇-中间件(四)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&…

Docker核心命令与Yocto项目的高效应用

随着软件开发逐渐向分布式和容器化方向演进&#xff0c;Docker 已成为主流的容器化技术之一。它通过标准化的环境配置、资源隔离和高效的部署流程&#xff0c;大幅提高了开发和构建效率。Yocto 项目作为嵌入式 Linux 系统构建工具&#xff0c;与 Docker 的结合进一步增强了开发…

我的图形布局 组织结构图布局

组织结构图布局,有的人也叫它树状布局,在图形中是经常用到的布局算法.形成类似如下图的图形布局方式 首先创建一个类, public class TreeLayouter {private int m_space 40;/// <summary>/// 空间间隔/// </summary>public int Space{get { return m_space; }se…

【18】编写shell-定期删除elastic索引

说明: 1)elastic索引是按日期生成的,所以执行shell脚本每天定时删除索引 2)只保留25天的索引,超过25天的elastic索引被删除,可以根据个人修改 3)日志elastic索引如下图所示: #! /bin/bashset -e# 定义变量 baol_num=25 ELASTIC_USER="elastic" ELASTIC_PASSW…

计算机网络ENSP课设--三层架构企业网络

本课程设计搭建一个小型互联网&#xff0c;并模拟Internet的典型Web服务过程。通过此次课程设计&#xff0c;可以进一步理解Internet的工作原理和协议过程&#xff0c;并提高综合知识的运用能力和分析能力。具体目标包括&#xff1a; &#xff08;1&#xff09;掌握网络拓扑的…