Binary Search 模板以及例题 (=target, >target, >=target)

根据Jikai Tang的网站和视频总结如下,

http://www.tangjikai.com/algorithms/leetcode-binary-search

1. 在sorted array里面找一个特定的数。

 1 def bsearch(array, l, r, target):
 2        while l <= r:
 3                 mid = l + (r - l) / 2
 4
 5                 if array[mid] > target:
 6                         r = mid - 1
 7                 elif array[mid] < target:
 8                         l = mid + 1
 9                 else:
10                         return mid
11
12         return -1

由于left和right可以相等,所以L2使用的是while l <= r。L3中的mid = l + (r-l)/2 比 mid = (l + r)/2 稍微好一点,原因是这样不会出现 l + r 太大导致溢出的情况。

例题 L167 two sum II sorted array

http://www.cnblogs.com/lettuan/p/6168439.html

Leetcode 74, 240 search in 2D matrix

http://www.cnblogs.com/lettuan/p/6213470.html

2. 找sorted array中第一个严格大于(或者大于等于) target的数。

 1 def findUpperBound(array, l, r, target):
 2         while l < r:
 3                 mid = l + (r - l) / 2
 4
 5                 if array[mid] > target:
 6                         r = mid
 7                 else:
 8                         l = mid + 1
 9
10         return l

首先注意模板中的L6, 如果array[mid] > target,这是mid完全有可能是第一个严格大于target的数,所以r只能挪到mid,而不能挪到mid-1.  而且L2中必须用 l<r,如果写成了l<=r。那么到上图中的step4之后,mid = l = r ,然后array[mid] > target,循环就无法结束。

寻找第一个大于等于target的题目模板几乎一样,只不过L6换成>=即可。

例题 Leetcode 35. Search Insert Position

http://www.cnblogs.com/lettuan/p/6367232.html

Leetcode 278. First Bad Version

http://www.cnblogs.com/lettuan/p/6182794.html

时间: 2024-08-27 05:16:29

Binary Search 模板以及例题 (=target, >target, >=target)的相关文章

binary search模板总结

二分查找算法是最常用的一种高效算法,所以本文将常见的情形做一个总结,得到一个二分查找的模板,方便应对各种二分查找中的问题. 当前有一个有序的数列: 1, 5, 9 [每个数字都是唯一的] 1, 2, 2, 9 [存在重复的数字] 模板 该模板可以在数列中查找一个数target,如果target在数列中存在,输出target第一次出现位置下标,如果不存在,则输出插入到数列中之后的下标. int binarySearch(vector<int>& numbers, int target)

LintCode Search For a Range (Binary Search)

Binary Search模板: mid 和 target 指针比较,left/ right 和 target 比较. 循环终止条件: 最后剩两数比较(while(left + 1 < right)). 循环结束后根据要求检查最后两个数(left/ right 和 target 比较). public class Solution { /** *@param A : an integer sorted array *@param target : an integer to be inserte

Binary search for the first element greater than target

We all know how to search through an array for an element whose value equals the target value, but how to search for the element that has value greater than the target value? A particularly elegant way of thinking about this problem is to think about

target = e.target || e.srcElement

//鼠标点击出现下拉菜单,点其他地方,缩回去.document.addEventListener("mousedown", function(e) { var target = e.target || e.srcElement; while (target != document && target != popup) { target = target.parentNode; } if (target == document) { popup.hide(); } },

make: *** No rule to make target `out/target/common/obj/APPS/framework-res_intermediates/src/R.stamp&#39;

/********************************************************************************** * make: *** No rule to make target `out/target/common/obj/APPS/framework-res_intermediates/src/R.stamp' * 说明: * 编译ethernet的遇到这个依赖没编译的问题. * * 2017-4-27 深圳 龙华民治樟坑村 曾剑锋

数据结构-二叉搜索树(Binary Search Tree)的C++实现模板

笔者最近开始学习了二叉树这种数据结构,于是写出了一个二叉树的实现~ 二叉树真是个好东西 =.= 该图显示了在二叉树中插入一个节点的步骤...下面就用这个二叉树做测试好了 /** "BST.h"  * The Binary Search Tree Data Structure in C++  * Time Cost : Inorder / Preorder / Postorder Traversal : O(n)  *             Search / Find / Insert

Binary Search - Jump on the Stones

Binary Search algorithm. Wikipedia definition: In computer science, binary search, also known as half-interval search, logarithmic search, or binary chop, is a search algorithm that finds the position of a target value within a sorted array. Binary s

[LC] Binary Search 题目/方法总结

Binary search 是最简单也十分常用的一种算法,能把O(n) 的搜索降到O(logn)这个帖子的总结是参考大神Grandyang的,甚至很多地方是直接抄袭过来,原贴在这里http://www.cnblogs.com/grandyang/p/6854825.html Binary Search Template 二分法常见关键词:sorted: 二分常见痛点有以下几个: 循环条件:start + 1 < end mid = start + (end - start) /2; A[mid]

Lowest Common Ancestor of a Binary Search Tree

1. Title 235. Lowest Common Ancestor of a Binary Search Tree 2. Http address https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ 3. The question Given a binary search tree (BST), find the lowest common ancestor (LCA) of two