芝士算法 (双指针篇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;

相关推荐
默默敲代码的徐哥儿4 小时前
八股文整理——后端
java·开发语言·spring boot·后端·学习
折哥的程序人生 · 物流技术专研5 小时前
第2篇:策略模式三大角色拆解与UML
java·设计模式·策略模式·uml·编程入门·行为型模式·扩充系列
李少兄5 小时前
Java CompletableFuture 解析(含常见面试题)
java·开发语言
名字还没想好☜5 小时前
Spring Boot 全局异常处理:@ControllerAdvice 实战
java·spring boot·后端·spring·异常处理
能摆一天是一天5 小时前
Spring ai vectorstore 使用本地模型导致只能匹配可行度为1.0的内容的解决方法笔记
java·笔记·spring
我命由我123455 小时前
方差(实例实操、与标准差的区别)
java·数据结构·算法·数据分析·java-ee·intellij-idea·idea
Java内核笔记5 小时前
Spring Security 源码解析(八)方法安全授权与自定义扩展:@EnableMethodSecurity、AOP、SpEL 全链路
java·后端
自由的裙子5 小时前
How-To: Using the N* Stack, part 4
java·jvm·oracle
努力努力再努力wz6 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
什巳6 小时前
JAVA练习275-乘积最大子数组
java·开发语言·数据结构·算法