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

相关推荐
唐青枫17 小时前
Java Flyway 实战指南:用 SQL 脚本管理数据库版本
java
apcipot_rain18 小时前
计科八股20260616(1)——堆存中位数、链表判环、黑白测试、敏捷开发与瀑布模型、配置管理、持续集成、池化
数据结构·算法·软件工程
huangdong_1 天前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring
記億揺晃着的那天1 天前
Java 调用外部 Go 程序的实践:ProcessBuilder 在生产环境中的应用
java·golang·processbuilder
JAVA面经实录9171 天前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
JAVA面经实录9171 天前
操作系统面试题
java·服务器·数据库·计算机网络·面试
一杯奶茶¥1 天前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
不能只会打代码1 天前
边缘视频分析平台的架构设计与性能优化——从750ms到190ms的调优之路
java·spring boot·redis·性能优化·边缘计算·物联网竞赛
小刘|1 天前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端
KANGBboy1 天前
java知识五(继承)
java·开发语言