二分法查找 (Binary Search)
二分法查找适用于排列有序的数据。java实现方法如下:
// Find the location of a value in array a
// Array a must be sorted
// Return -1, if the value is not in a
public static int binarySearch(int value, int[] a) { int lo = 0;
int hi = a.length -1;
int mid = lo + (hi - lo) / 2; while(lo <= hi) { if (value > a[mid]) lo = mid + 1;
else if (value < a[mid]) hi = mid - 1;
else return mid; mid = lo + (hi - lo) / 2;
} return -1;
}
有几点需要说明:
while(lo <= hi) 必须是 <= 。若缺少=,则数组的最后一个数据一定查找失败。
每次循环lo = mid + 1;hi = mid - 1;必须加上或减去-,否则可能造成死循环。
如: 当lo与hi相邻时,lo的位置为i,hi的位置为i+1,则mid = lo或hi,无法改变hi与lo的位置,陷入死循环。
二分法查找 (Binary Search)的更多相关文章
- 二分法查找(Binary Search)
		
--摘要:二分法的介绍已经很多了,但并不直观,因此此文诞生,希望批评指正. 二分查找是在有序数组中查找一个元素的算法,通过比较目标元素与数组中间元素来查找,如果目标值是中间元素则将返回中间元素位置. ...
 - STL之二分查找 (Binary search in STL)
		
STL之二分查找 (Binary search in STL) Section I正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound ...
 - 【转】STL之二分查找 (Binary search in STL)
		
Section I正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound,equal_range 本文是对Effective STL第4 ...
 - LeetCode编程训练 - 折半查找(Binary Search)
		
Binary Search基础 应用于已排序的数据查找其中特定值,是折半查找最常的应用场景.相比线性查找(Linear Search),其时间复杂度减少到O(lgn).算法基本框架如下: //704. ...
 - 算法与数据结构基础 - 折半查找(Binary Search)
		
Binary Search基础 应用于已排序的数据查找其中特定值,是折半查找最常的应用场景.相比线性查找(Linear Search),其时间复杂度减少到O(lgn).算法基本框架如下: //704. ...
 - LeetCode 704. 二分查找(Binary Search)
		
704. 二分查找 704. Binary Search 题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果 ...
 - 二分查找(binary search)
		
二分查找又叫折半查找,要查找的前提是检索结果位于已排序的列表中. 概念 在一个已排序的数组seq中,使用二分查找v,假如这个数组的范围是[low...high],我们要的v就在这个范围里.查找的方法是 ...
 - 数据结构-二分查找(Binary Search)
		
#include <stdio.h> #include <string.h> #include <stdlib.h> #define LIST_INIT_SIZE ...
 - [Swift]LeetCode704. 二分查找 | Binary Search
		
Given a sorted (in ascending order) integer array nums of nelements and a target value, write a func ...
 - Leetcode之二分法专题-704. 二分查找(Binary Search)
		
Leetcode之二分法专题-704. 二分查找(Binary Search) 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 t ...
 
随机推荐
- 在命令行中直接运行带main方法的java
			
用了很久的java,基本都是交给服务器完成的执行,有page之类的入口,或者是在IDE工具中直接 Run As Java Application. 并且一直对安装java之后配置JAVA_HOME,p ...
 - duilib 实现列表头任意拖动
			
1.表头(xml) <List name="List_records" padding="5,10,5,5" bkcolor="#FFFFFFF ...
 - Awk 从入门到放弃(5)– Awk模式(Pattern)之一
			
转:http://www.zsythink.net/archives/1426
 - bzoj1617
			
题解: dp f[i]表示运i头奶牛需要的时间 f[i]=f[i-j]+a[i]+2*m 然后ans=f[n]-m(最后一次不用跑回来) 代码: #include<bits/stdc++.h&g ...
 - eclipse设置(颜色,字体等)
			
1.设置jsp中js块的颜色: 选择Preferences菜单项.在弹出的窗口的左侧树形菜单依次选择:MyEclipse.Files and Editors.Javascript.Editor.Syn ...
 - 使用Messenger 从Activity发送数据到service 通过后台计算结果Log输出;
			
package com.lixu.messenger; import android.app.Activity; import android.app.Service; import android. ...
 - webpack-dev-server将文件产出到指定目录
			
默认情况下webpack-dev-server是将文件产出到内存中,写了一个插件 将文件产出到指定目录, 比较简易啊 哈哈哈 使用代码如下 const WebpackDevServerOutput = ...
 - 使用存储过程非常慢,但是直接执行SQL很快
			
使用存储过程非常慢,但是直接执行SQL很快. 了解基本情况后,初步判断是参数嗅探问题 在对应的SQL语句后面使用 OPTION(OPTIMIZE FOR UNKNOWN) 参考了 http://www ...
 - redis 五大数据类型之string篇
			
一: 1:string(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value. string类型是二进制安全的.意思是redis ...
 - Python学习(002)--Python介绍
			
一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...