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

相关推荐
泡海椒2 分钟前
JQuick-Excel 项目定位与适用场景:声明式 Java Excel 的边界
java·开发语言·excel
AC赳赳老秦6 分钟前
财报附注表格精准提取:OpenClaw 从 PDF 年报附注挖掘隐藏明细,补齐财务分析维度
java·汇编·c++·python·青少年编程·deepseek·openclaw
箓维12 分钟前
线程的优缺点,与进程的关联和差异
java·服务器·笔记
曹牧13 分钟前
Spring MVC:@RequestMapping
java·spring·mvc
曹牧33 分钟前
Spring MVC : Controller 层URL划分
java·运维·服务器·前端
_不会dp不改名_34 分钟前
leetcode_1614嵌套括号的最大深度
算法·leetcode·职场和发展
卓怡学长1 小时前
w203基于springboot钢材仓库管理系统的设计与实现
java·spring boot·spring·intellij-idea
sunburn-1 小时前
Java 排序算法详细教学:从冒泡排序到快速排序
java·开发语言·数据结构·ide·算法
我是小白呀1 小时前
编排还是事件协作?用 AcmeFlow 讲清企业 Workflow 的控制权
java·开发语言
深入云栈1 小时前
Netty 4.2.x 源码深度解析 (十四):KQueue 传输 —— macOS 高性能 IO 的 Netty 实现
java·后端