本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(算法交流),想要加入的,请添加我的微信号:zhujinhui207407 谢谢。另外,本人的个人博客 http://www.kyson.cn 也在不停的更新中,欢迎一起讨论
知识点
- 快速 3-sum
题目
1.4.15 快速 3-sum。作为热身,使用一个线性级别的算法(而非基于二分查找的线性对数级别的算法)实现 TwoSumFaster 来计算已排序的数组中和为 0 的整数对的数量。用相同的思想为 3-sum 问题给出一个平方级别的算法。
1.4.15 Faster 3-sum. As a warmup, develop an implementation TwoSumFaster that uses a linear algorithm to count the pairs that sum to zero after the array is sorted (in- stead of the binary-search-based linearithmic algorithm). Then apply a similar idea to develop a quadratic algorithm for the 3-sum problem.
分析
基于上一题的答案,我们不难得出这道题的答案
答案
public class TwoSumFaster {
public int twoSumFaster(int[] a) {
int cnt = 0;
int len = a.length;
for (int j = 0, k = len - 1; j < k;) {
if (a[j] + a[k] < 0) {
j++;
} else if (a[j] + a[k] > 0) {
k--;
} else {
j++;
k--;
++cnt;
}
}
return cnt;
}
}
public class ThreeSumFaster {
public int threeSumFaster(long[] a) {
int cnt = 0;
int len = a.length;
for (int j = 0; j < len - 2 ; j ++) {
for(int k = j + 1,h = len -1;k < h;){
if (a[j] + a[k] + a[h] < 0) {
k++;
} else if (a[j] + a[k] + a[h] > 0) {
h--;
} else {
k++;
h--;
++cnt;
}
}
}
return cnt;
}
}
代码索引
广告
我的首款个人开发的APP壁纸宝贝上线了,欢迎大家下载。
网友评论