目录
有效三角形个数

//先排序
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;