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

相关推荐
BerrySen17810 小时前
一个Java项目改成AI流程后,最难的部分完全变了
java·大数据·人工智能·可观测性·大模型应用开发·工程思维
程序猿秃头之路10 小时前
DDD 系列:DTO、VO、DO、Entity 怎么区分
java·ddd·领域驱动设计
自由随风飘11 小时前
JAVA中的面向对象-3
java·开发语言
白白白小纯11 小时前
算法篇—返回倒数第k个节点
c语言·数据结构·算法·leetcode
无忧.芙桃11 小时前
数据结构之堆
c语言·数据结构·c++·算法·
桐薇全肯定11 小时前
MySQL学生成绩管理系统实战操作
java·数据库·sql
小蒋学算法11 小时前
算法-删除元素后最大固定点数目-典型最长增长序列算法
数据结构·算法
Nuanyt12 小时前
SSM 学习记录 第二部分 Spring整合Mybatis&Junit AOP核心概念 Spring事务管理 SpringMVC 请求与响应 Rest风格
java·spring·junit·mybatis·restful
醉城夜风~12 小时前
C++模板详解:从基础到高级全面解析
java·开发语言·c++