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“逆序对”的解答源码。这两个问题都是...
introduction_to_algorithm 中文版为算法圣经,此处整理资源来自 https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/index.htm 的...
算法导论第三版练习题15.2-2的C++实现方案
《算法导论--教师手册》是一本针对计算机科学专业学生及教师的重要参考书籍,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein四位作者共同编撰,第二版由Thomas H. Cormen、Clara Lee...
- **2.3 算法设计**:提供了一些常用的设计策略,如贪心算法、分治法等。 - **第三章:函数的增长** - **3.1 渐近表示法**:介绍了大O记号、Ω记号、θ记号等用于描述算法时间复杂度的方法。 - **3.2 常见函数和...
3. **排序与搜索**:快速排序、归并排序、堆排序、冒泡排序、二分查找等是常见的排序和搜索算法,它们在实际应用中广泛使用,学习这些算法有助于提高代码的效率。 4. **递归与分治策略**:递归是一种函数自我调用的...
算法导论上的一个习题,第四章递归那章,4-7。 该源码提供一个对该题目算法的一个实现。
算法导论是算法方面的入门方面的权威著作,通俗易懂,很容易让人理解
2. **搜索算法**:如二分查找、广度优先搜索(BFS)和深度优先搜索(DFS)等,它们在数据结构如数组、树和图的查找中不可或缺。二分查找适用于有序数组,而DFS和BFS则在图遍历中有着广泛的应用。 3. **图算法**:如...
`pylzma`是Python对7-Zip的LZMA压缩算法的实现,7-Zip是一款广泛使用的开源压缩软件,以其高度的压缩效率而闻名。LZMA(Lempel-Ziv-Markov chain algorithm)是一种数据压缩算法,它基于预测的字典编码和自适应编码...
搜索算法方面,二分查找、线性查找以及哈希表的查找技术可能会被详细讨论。 在数据结构部分,PPT可能会涵盖数组、链表、栈、队列、树(二叉树、平衡查找树如AVL和红黑树)、图等基本数据结构。每个数据结构的特点、...
算法导论,英文版,附习题解析 Introduction to Algorithms, Second Edition Thomas H. Cormen Charles E. Leiserson Ronald L. Rivest Clifford Stein The MIT Press
例如,PS1可能会介绍基本的排序算法如冒泡排序、插入排序,以及查找算法如线性查找和二分查找。 2. **数据结构**:数据结构是算法的基础,作业中可能涉及到数组、链表、栈、队列、树、哈希表等。例如,PS4和PS5可能...
总的来说,`detoxed-0.1.2.3-py3-none-any.whl` 是一个针对Python 3编译的二进制库文件,用于提供特定的Python功能。用户可以通过pip安装,但具体的应用场景和功能需要通过查阅相关文档来了解。在Python开发中,合理...
《算法导论》是计算机科学领域的一本经典教材,涵盖了广泛的算法分析和设计技术。这本书的第31至35章包含了许多关键的算法概念,这些章节深入探讨了不同的算法主题,对于理解和掌握算法有着至关重要的作用。以下是这...
《算法导论》第二十章习题解答涵盖了各种高级算法问题,主要涉及图论和网络流等内容。在这一章中,作者深入探讨了如何解决实际问题,如最短路径、最大流最小割以及网络调度等问题。以下是部分习题的解析和相关知识点...
本次上传的文件包含《算法导论》课程前七章的学习笔记,内容涵盖了基础算法(如插入排序、归并排序)、递归方程的解法、数据结构(如堆、二叉搜索树)的操作与分析,以及图论算法(如BFS、DFS)等。该笔记详细记录了...
《算法导论》是计算机科学领域的一本经典著作,它深入浅出地介绍了各种重要的算法,并提供了详尽的分析和实现。第十五章通常涉及图算法,包括最短路径、最小生成树、网络流等核心概念。在这个压缩包中,我们可能会...
标题中的“hpl-2.3-s1_interiork6w_hpl2.3_hpl_arm的cpu架构”暗示了这是一个针对HPL 2.3版本的优化版本,特别为内核型号为interiork6w的ARM架构CPU设计。这个压缩包中的内容可能是为了在ARM平台上运行HPL时提高效率...
二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或小于中间元素,则在数组大于或小于中间元素的...