`
kevin_in_java
  • 浏览: 30315 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

算法导论2.3-7 二分查找变种题目

阅读更多

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;
	}
	
}

 

0
1
分享到:
评论
2 楼 panggezi 2011-11-20  
现在面试都考O(N)的实现了。
1 楼 panggezi 2011-11-20  
现在面试都考O(N)的实现了。

相关推荐

    算法导论课后习题2.3-7和思考题2-4答案源码

    《算法导论》是计算机科学领域的一本经典教材,它深入浅出地介绍了各种重要的算法,并提供了详尽的实现和分析。在这个压缩包中,包含了课后习题2.3-7“合并排序”和思考题2-4“逆序对”的解答源码。这两个问题都是...

    麻省理工算法导论(introduction_to_algorithm)slide

    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-1矩阵链最优括号化方案

    算法导论第三版练习题15.2-2的C++实现方案

    算法导论--教师手册

    《算法导论--教师手册》是一本针对计算机科学专业学生及教师的重要参考书籍,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein四位作者共同编撰,第二版由Thomas H. Cormen、Clara Lee...

    算法导论 - Thomas

    - **2.3 算法设计**:提供了一些常用的设计策略,如贪心算法、分治法等。 - **第三章:函数的增长** - **3.1 渐近表示法**:介绍了大O记号、Ω记号、θ记号等用于描述算法时间复杂度的方法。 - **3.2 常见函数和...

    算法导论课件-经典.rar

    3. **排序与搜索**:快速排序、归并排序、堆排序、冒泡排序、二分查找等是常见的排序和搜索算法,它们在实际应用中广泛使用,学习这些算法有助于提高代码的效率。 4. **递归与分治策略**:递归是一种函数自我调用的...

    算法导论4-7

    算法导论上的一个习题,第四章递归那章,4-7。 该源码提供一个对该题目算法的一个实现。

    算法导论--最新版

    算法导论是算法方面的入门方面的权威著作,通俗易懂,很容易让人理解

    算法导论--中文

    2. **搜索算法**:如二分查找、广度优先搜索(BFS)和深度优先搜索(DFS)等,它们在数据结构如数组、树和图的查找中不可或缺。二分查找适用于有序数组,而DFS和BFS则在图遍历中有着广泛的应用。 3. **图算法**:如...

    Python库 | pylzma-0.4.4-py2.3-win32.egg

    `pylzma`是Python对7-Zip的LZMA压缩算法的实现,7-Zip是一款广泛使用的开源压缩软件,以其高度的压缩效率而闻名。LZMA(Lempel-Ziv-Markov chain algorithm)是一种数据压缩算法,它基于预测的字典编码和自适应编码...

    算法导论ppt-xm大学

    搜索算法方面,二分查找、线性查找以及哈希表的查找技术可能会被详细讨论。 在数据结构部分,PPT可能会涵盖数组、链表、栈、队列、树(二叉树、平衡查找树如AVL和红黑树)、图等基本数据结构。每个数据结构的特点、...

    算法导论--英文版--附习题解析

    算法导论,英文版,附习题解析 Introduction to Algorithms, Second Edition Thomas H. Cormen Charles E. Leiserson Ronald L. Rivest Clifford Stein The MIT Press

    算法导论.-.Homework

    例如,PS1可能会介绍基本的排序算法如冒泡排序、插入排序,以及查找算法如线性查找和二分查找。 2. **数据结构**:数据结构是算法的基础,作业中可能涉及到数组、链表、栈、队列、树、哈希表等。例如,PS4和PS5可能...

    Python库 | detoxed-0.1.2.3-py3-none-any.whl

    总的来说,`detoxed-0.1.2.3-py3-none-any.whl` 是一个针对Python 3编译的二进制库文件,用于提供特定的Python功能。用户可以通过pip安装,但具体的应用场景和功能需要通过查阅相关文档来了解。在Python开发中,合理...

    算法导论章节答案(31~35章)

    《算法导论》是计算机科学领域的一本经典教材,涵盖了广泛的算法分析和设计技术。这本书的第31至35章包含了许多关键的算法概念,这些章节深入探讨了不同的算法主题,对于理解和掌握算法有着至关重要的作用。以下是这...

    算法导论第二十章习题解答

    《算法导论》第二十章习题解答涵盖了各种高级算法问题,主要涉及图论和网络流等内容。在这一章中,作者深入探讨了如何解决实际问题,如最短路径、最大流最小割以及网络调度等问题。以下是部分习题的解析和相关知识点...

    算法导论 1-7章学习笔记

    本次上传的文件包含《算法导论》课程前七章的学习笔记,内容涵盖了基础算法(如插入排序、归并排序)、递归方程的解法、数据结构(如堆、二叉搜索树)的操作与分析,以及图论算法(如BFS、DFS)等。该笔记详细记录了...

    算法导论第十五章习题解答

    《算法导论》是计算机科学领域的一本经典著作,它深入浅出地介绍了各种重要的算法,并提供了详尽的分析和实现。第十五章通常涉及图算法,包括最短路径、最小生成树、网络流等核心概念。在这个压缩包中,我们可能会...

    hpl-2.3-s1_interiork6w_hpl2.3_hpl_arm的cpu架构_

    标题中的“hpl-2.3-s1_interiork6w_hpl2.3_hpl_arm的cpu架构”暗示了这是一个针对HPL 2.3版本的优化版本,特别为内核型号为interiork6w的ARM架构CPU设计。这个压缩包中的内容可能是为了在ARM平台上运行HPL时提高效率...

    算法导论第三版答案

    二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或小于中间元素,则在数组大于或小于中间元素的...

Global site tag (gtag.js) - Google Analytics