第一题 : 统计数组两项相加为给定值的个数
看题很容易 三种解法 第一种用两个for循环暴力破解一样
第二种 一个for循环里通过二分查找-value(两项效果不明显)
第三种 通过排序 在通过排序的信息一遍for循环
下面几题上三种方法均适用(不过是加个for循环),前两种就不给代码了,下面贴出以下几题的第三种方法代码,有错误还望指出
TwoSum.java
import java.util.Arrays;
import edu.princeton.cs.algs4.StdRandom;
public class TwoSumFaster {
private int[] a;
public TwoSumFaster(int N)
{
a = new int[N];
int MAX = 100000;
for (int i = 0; i < N; ++i)
a[i] = StdRandom.uniform(-MAX,MAX);
Arrays.sort(a);
}
public TwoSumFaster()
{
}
public void copyArray(int[] b)
{
a = new int[b.length];
for (int i = 0; i < a.length; ++i)
a[i] = b[i];
Arrays.sort(a);
}
public int count(int target)
{
int lo = 0;
int hi = a.length - 1;
int count = 0;

这篇博客介绍了如何高效地解决统计数组中元素相加等于给定值的问题。通过排序和二分查找的方法,避免了暴力求解的复杂度,分别展示了针对两项、三项和四项相加的优化算法实现,提供了ThreeSumFaster和FourSumFaster的代码示例,并附带测试用例。
最低0.47元/天 解锁文章
802

被折叠的 条评论
为什么被折叠?



