算法之ThreeSum篇
2021-03-28 09:25
标签:arch href binary top 方法 java 三元 pointer 错误 topic:ThreeSum 注意:数组中不能有重复元素 算法之ThreeSum篇 标签:arch href binary top 方法 java 三元 pointer 错误 原文地址:https://www.cnblogs.com/Cindy-H/p/13635063.html
目标:用于统计一个数组中和为 0 的三元组数量,每个三元组都不重复方法
方法一:最简单方法
public class ThreeSumSlow implements ThreeSum{
@Override
public int count(int[] shuzu) {
int c = 0; //次数
for(int i = 0; i
方法二:先排序,对两元素求和,再用二分查找寻找相反数
import java.util.Arrays;
public class ThreeSumBinarySearch implements ThreeSum{
@Override
public int count(int[] shuzu) {
//先排序
Arrays.sort(shuzu);
int len = shuzu.length;
int c = 0;
int negSum;
int index; //找到的相反数的下标
//先对两个元素求和,再找有没有和的相反数的数
for(int i = 0; i j) c ++; //如果小于j,可能会重复计数!!!
}
}
return c;
}
}
方法三:先排序,再用左右两指针查找一个数的相反数
import java.util.Arrays;
public class ThreeSumTwoPointer {
//先将数组排序,再设置双指针查找
public int count(int[] shuzu) {
Arrays.sort(shuzu);
int N = shuzu.length;
int c = 0; //count
for(int i = 0; i 0 && shuzu[i] == shuzu[i-1]) continue; //若该数与上一个index的数相同,则跳过。因为已经考虑过这种情况了
int l = i+1;
int r = N-1;
int target = -shuzu[i];
while(l
下一篇:100. 相同的树(C++)