第一题 : 统计数组两项相加为给定值的个数
看题很容易 三种解法 第一种用两个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;