package Chapter2;
/*
* 题目:算法导论2.3.7
* 请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,
* 判断出S中是否存在有两个其和等于S的数
*
*算法思想:
*1、默认集合S是排序过的,若果没有排序,先排序。。。各种排序方法。
*2、本问题是二分查找的变形。。
* for i ←1to n
* temp=x-array[i]
* 二分查找temp
*
*/
public class SearchSum {
public static void main(String args[])
{
int[]s={1,3,6,9,45,68,106};
int x=9;
Index index = new SearchSum().getFittedIndex(s, x);
if(null==index)
System.out.println("can't find");
else
{
System.out.println("index_1: "+index.getIndex_1());
System.out.println("index_2: "+index.getIndex_2());
}
}
public Index getFittedIndex(int []s,int x)
{
int result=-1;
int i;
for( i=0;i<s.length-1;i++)
{
int temp=x-s[i];
//二分查找temp
result = search(s,1,s.length-1,temp);
if(result>=0)
break;
}
if(result<0)
return null;
else
return new Index(i,result);
}
public static int search(int[] array,int start,int end,int target)
{
int middle = (start+end)/2;
if(target==array[middle])
return middle;
/*
* 当数列只剩两个元素时{start,end}
* 由于middle每次都等于start,故做特殊判断
*
*/
if(end==start+1)
if(target==array[end])
return end;
else
return -1;
if(target<array[middle])
return search(array,start,middle,target);
if(target>array[middle])
return search(array,middle,end,target);
return -1;
}
}
class Index {
private int index_1;
private int index_2;
public int getIndex_2() {
return index_2;
}
public void setIndex_2(int index_2) {
this.index_2 = index_2;
}
public int getIndex_1() {
return index_1;
}
public void setIndex_1(int index_1) {
this.index_1 = index_1;
}
public Index(int index_1, int index_2) {
super();
this.index_1 = index_1;
this.index_2 = index_2;
}
}
分享到:
相关推荐
算法导论课后习题2.3-7合并排序和思考题2-4逆序对答案源码
算法导论----算法经典书籍----不用我多做介绍了吧。算法导论----算法经典书籍----不用我多做介绍了吧。
算法导论课件-经典.rar算法导论课件-经典.rar算法导论课件-经典.rar算法导论课件-经典.rar算法导论课件-经典.rar算法导论课件-经典.rar算法导论课件-经典.rar
introduction_to_algorithm 中文版为算法圣经,此处整理资源来自 https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/index.htm 的...
计算机算法导论--教师手册 英文原版 计算机专业必读书
算法导论--编程中经典的经典,值得每一位程序员用心品读
算法面试通关40讲完整课件 35-36 二分查找 算法面试通关40讲完整课件 35-36 二分查找 算法面试通关40讲完整课件 35-36 二分查找 算法面试通关40讲完整课件 35-36 二分查找 算法面试通关40讲完整课件 35-36 二分查找 ...
算法导论第三版练习题15.2-2的C++实现方案
这是算法导论第二版后面的8.3-4习题答案,整理过后的
最近在研习算法导论,发现课后习题的精彩程度甚至不亚于正文,对于算法导论的爱好者而言,这是一份不错的参考资料
算法导论的重点以及课后习题答案和思考题答案。是英文的
算法导论--Introduction.to.Algorithms
算法导论作业-->Introduction to algrithms:homework
MIT课程算法导论6-046JFall-2005
算法导论上的一个习题,第四章递归那章,4-7。 该源码提供一个对该题目算法的一个实现。
中科大算法导论答案1-13次全部 中科大算法导论答案1-13次全部 中科大算法导论答案1-13次全部 中科大算法导论答案1-13次全部 中科大算法导论答案1-13次全部 中科大算法导论答案1-13次全部
TarsosDSP 库的定位 : 数字信号处理 ( DSP ) 算法都很复杂 , 涉及傅里叶变换 , 数字滤波器等算法 , 复变函数等数学理论 , 想想就很复杂 ; ① 小巧简单 : TarsosDSP 库在旨在减小函数库库的体量 , 可以简单地调用 ...
[算法导论].[Introduction.to.Algorithms].Thomas.H.Cormen.Ronald.L.Rivest.Charles.E.Leiserson.Clifford.Stein.文字版.pdf
算法导论 算法导论 算法导论 算法导论 算法导论 算法导论算法导论 算法导论 算法导论