摘要:
1.4.21无重复值之中的二分查找。用二分查找实现StaticSETofInts(请见表1.2.15),保证contains()的运行时间为~lgR,其中R为参数数组中不同整数的数量。答:感觉到不到点。import java.util.Arrays;public class E1d4d21{ pri 阅读全文
摘要:
1.4.19矩阵的局部最小元素。给定一个含 有N^2个不同整数的NXN数组a[]。设计一个运行时间和N成正比的算法来找出一个局部最小元素:满足a[i][j]<a[i+1][j]、a[i][j]<a[i][j+1]、a[i][j]<a[i-1][j]以及a[i][j]<a[i][j-1]的索引i和j。 阅读全文
摘要:
1.4.20双调查找。如果一个数组中的所有元素是先递增后递减的,则称这个数组为双调的。编写一个程序,给定一个含有N个不同int值的双调数组,判断它是否含有给定的整数。程序在最坏情况下所需的比较次数为~3lgN。答:第一步找出数组中的最大值索引,然后将数组从最大值索引位置一分为二,将数组分为单调递增和 阅读全文
摘要:
1.4.18数组的局部最小元素。编写一个程序,给定一个含有N个不同整数的数组,找到一个局部最小元素:满足a[i]<a[i-1],且a[i]<a[i+1]的索引i。程序在最坏情况下所需的比较次数为~2lgN。答:检查数组的中间值a[N/2]以及和它相邻的元素a[N/2-1]和a[N/2+1]。如果a[ 阅读全文
摘要:
1.4.17最遥远的一对(一维)。编写一个程序,给定一个含有N个double值的数组a[],在其中找到一对最遥远的值:两者之差(绝对值)最大的两个数。程序在最坏情况下所需的运行时间应该是线性级别的。答:import java.util.Arrays;public class TheFast{ pub 阅读全文
摘要:
1.4.16最接近的一对(一维)。编写一个程序,给定一个含有N个double值的数组a[],在其中找到一对最接近的值:两者之差(绝对值)最小的两个数。程序在最坏情况下所需的运行时间应该是线性对数级别的。答:一个简单的实现,不 考虑多对最近点。import java.util.Arrays;publi 阅读全文
摘要:
1.4.14 4-sum。为4-sum设计一个算法。答:import java.util.Arrays;public class FourSum{ public static int count1(int[] a) { int cnt=0; for(int i=0;i<a.length;i++) f 阅读全文
摘要:
1.4.15快速3-sum。作为热身,使用一个线性级别的算法(而非基于二分查找的线性对数级别的算法)实现TwoSumFaster来计算已排序的数组中和为0的整数对的数量。用相同的思想为3-sum问题给出一个平方级别的算法。答:import java.util.Arrays;public class 阅读全文
摘要:
1.4.13根据正文中的假设分别给出表示以下数据类型的一个对象所需的内存量:a.Accumulator对象开销:16字节total:8字节的double变量计数变量:4字节的int变量填充:4字节共计:32字节b.Transaction对象开销:16字节who:64+2*length(who)字节w 阅读全文
摘要:
1.4.12编写一个程序,有序打印给定的两个有序数组(含有N个int值)中的所有公共元素,程序在最坏情况下所需的运行时间应该和N成比。答:import java.util.Arrays;public class TheSameElement{ public static void main(Stri 阅读全文