90 和为s的连续正数序列

问题描述:输入一个正整数target,输出所有和为target的连续正整数序列(至少包含两个数),序列内的数字大小由小到大排列,不同序列按照首个字母从小到大排列。

for循环求解:对于for循环而言复杂度为n2较高。

java 复制代码
public List<List<Integer>>sumS(int target)
{
List<List<Integer>> res=new List<>();
for(int i=1;i<target/2;i++)
{
int sum=i;
List<Integer>list=new LinkedList<>();
list.add(i);
for(int j=i+1;j<target/2;j++)
{
if(sum+j>target)
break;
}else if(sum+j==target)
{
list.add(j);
res.add(list);
}else
{
sum+=j;
list.add(j)
}
}
​​​​​​​return res;
}

滑动窗口解决:定义一个sum(int类型)表示从左left到右right这个区间中的和,若sum小于target,则right右移,sum+nums[target],若大于taget,则left左移,若等于,则更新价收入数组中。

java 复制代码
public List<List<Integer>>sumS(int target)
{
int left=1;
int right=2;
int sum=left+right;
List<int[]>res=new LinkedList<>();
while(left<target/2)
{
if(sum<target)
{
right++;
sum+=right;
}else if(sum>target)
{
sum-=left;
left++;
}else
{
int []array=new int[right-left+1];
for(int i=0;i<array.length;i++)
{
array[i]=left+i;
}
res.add(array);
}
}
return res.toArray(new int[res.size()][]);
}
相关推荐
Geoking.几秒前
【设计模式】策略模式(Strategy)详解:把 if-else 变成可切换的算法
java·设计模式·策略模式
代码改变生活-120几秒前
idea 清除缓存之后重启项目编译失败
java·缓存·intellij-idea
kebijuelun9 分钟前
Qwen 团队提出 ArenaRL:面向开放式 Agent RL 任务
人工智能·算法·语言模型·transformer
Microsoft Word10 分钟前
HashMap面试题总结
java·开发语言
机器学习之心11 分钟前
PSO优化的K-means++聚类算法用于用户用电行为分析的实现方案
算法·kmeans·聚类
stillaliveQEJ12 分钟前
【MyBatis】DML映射
java·mybatis
小黄鸭code15 分钟前
C++ 算法笔试题(常见算法版)
c++·算法·排序算法
qq_124987075316 分钟前
基于SSM框架的智能密室逃脱信息管理系统(源码+论文+部署+安装)
java·大数据·人工智能·spring boot·后端·毕业设计·计算机毕业设计
lixinnnn.18 分钟前
优先级队列:最小函数值
数据结构·算法
ekkcole20 分钟前
java实现对excel文件合并单元格(只针对文件)
java·开发语言·excel