LintCode问题图解-3

本文准备讲解1个简单的算法编程问题, 这个算法编程问题来自LintCode平台。不了解.LintCode平台的读者可以阅读笔者文章(在线编程平台推荐-LeetCode)。问题的英文版本描述如下:

First Position of Target

For a given sorted array (ascending order) and a target number, find the first index of this number in O(log n) time complexity.

If the target number does not exist in the array, return -1.

Example

If the array is [1, 2, 3, 3, 4, 5, 10], for given target 3, return 2.

  问题的中文版本描述:

二分查找

给定一个排序的整数数组(升序)和一个要查找的整数 target,用O(logn)的时间查找到 target 第一次出现的下标(从0开始),如果 target 不存在于数组中,返回-1。

样例

在数组[1, 2, 3, 3, 4, 5, 10]中二分查找3,返回2。

  刚好JAVA语言支持对数组的二分查找,所以这个问题很有价值。JAVA语言自带的数组二分查找函数无法支持数组中有重复数据的状况,当数组中有重复数据时,自带函数不保证返回的返回值为需要的目标数据数组下标号。比如对样例数组,查找3返回3;而不是题目需要的2。为了处理重复数据的问题,必须对经典二分查找算法做改造。关键的算法为:找到目标数据后,不能中断查找算法;继续寻找数组下标号最小的目标数据项。

  算法的代码列表如下:


LintCode问题图解-3_第1张图片
推荐的算法

  现在公布1种高效的算法方案,该方案对应 LintCode 平台表现更强。


LintCode问题图解-3_第2张图片
高效的算法

你可能感兴趣的:(LintCode问题图解-3)