芝士算法 (双指针篇2.0)

目录

有效三角形个数

查找总价格为目标值的两个商品

三数之和

四数之和


有效三角形个数

有效三角形个数

//先排序

Arrays.sort(nums);

//计算个数

int ret = 0;

int n = nums.length;

for(int i = n - 1 ; i >= 2 ; i--){

//定义左右指针

int left = 0;

int right = i - 1;

//判断大小

while(left < right){

if(numsleft + numsright > numsi){

ret+= right - left;

right--;

}else{

left++;

}

}

}

return ret;

查找总价格为目标值的两个商品

查找总价格为目标值的两个商品

这里的思路和上述的保持一致

但是值得注意的一点是

else 中的返回 会接受不到 所以要在最外层 再设置一个返回值

int left = 0 ;

int right = price.length - 1;

while(left < right){

if(priceleft + price right < target){

left++;

}else if(priceright + priceleft > target){

right--;

}else{

return new int\[\]{priceleft,priceright};

}

}

return new int\[\]{0};

三数之和

三数之和

List<List<Integer>> ret = new ArrayList<>();

//排序

Arrays.sort(nums);

int n = nums.length;

//deal wiith

for(int i = 0; i < n ;){

if(numsi > 0){

break;

}

int left = i + 1;

int right = n - 1;

int target = -numsi;

while(left < right){

int sum = numsleft + numsright;

if(sum < target){

left++;

}else if(sum > target){

right--;

}else{

//找到存放

ret.add(new ArrayList<Integer>(Arrays.asList(numsi,numsleft,numsright)));

left++;

right--;

//去重

while(left<right && numsleft == numsleft-1){

left++;

}

while(left<right && numsright == numsright+1){

right--;

}

}

}

//去重i

i++;

while(i < n && numsi == numsi-1){

i++;

}}

return ret;

四数之和

四数之和

List<List<Integer>> ret = new ArrayList<>();

//排序

Arrays.sort(nums);

//

int n = nums.length;

for(int i = 0; i < n ;){

for(int j = i+1 ; j < n;){

int left = j + 1 ;

int right = n - 1;

long target1 = (long) target - numsi - numsj;

while(left<right){

int sum = numsright + numsleft;

if(sum > target1){

right--;

}else if(sum < target1){

left++;

}else{

ret.add(Arrays.asList(numsi,numsj,numsleft,numsright));

left++;

right--;

//去重

while(left < right && numsleft == numsleft - 1){

left++;

}

while(left < right && numsright == numsright + 1){

right--;

}

}

}

//去重 I J

j++;

while(j < n && numsj == numsj - 1){

j++;

}

}

i++;

while(i < n && numsi == numsi - 1){

i++;

}

}

return ret;

相关推荐
邪修king1 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
拆房老料2 小时前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
张张123y3 小时前
后端第十四课:Agent 记忆系统(让 Agent 记住上下文和用户,跨会话不健忘)
java·大数据·人工智能·python·agent·记忆
曹牧7 小时前
C#:空合并运算符
java·前端·数据库
布吉岛的石头7 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
golang学习记8 小时前
IDEA 2026年的玩法已经完全不同
java·ide·intellij-idea
紧跟先前的步伐8 小时前
Go AI Agent 实战 05|Temperature 与生成参数:让模型输出可控
java·人工智能·golang
金銀銅鐵8 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨8 小时前
spring auth 核心流程详解
java·后端·spring
罗湖老棍子9 小时前
【例 1】Sightseeing Trip(信息学奥赛一本通- P1494)(洛谷-P10927)
数据结构·算法·图论·最短路·floyd·最小环