您的位置:首页 > 其它

first-position-of-target

2016-11-05 02:48 323 查看
http://www.lintcode.com/zh-cn/problem/first-position-of-target/
http://www.jiuzhang.com/solutions/first-position-of-target/
描述:

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

样例

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

经典二分法模板,应用的关键在于数组是升序的

思想为:我先把这个数组分成两段,由于是升序的,所以左段小于右段,然后我把target和最中间的数(划分这两段的数)去比较,根据大小关系就可以确认到底target在哪一段了。如此不停地重复去做,就相当于可以把问题规模不断的以除以二的方式缩小,最后解决。
class Solution:
# @param nums: The integer array
# @param target: Target number to find
# @return the first position of target in nums, position start from 0
def binarySearch(self, nums, target):
if len(nums) == 0:
return -1

start, end = 0, len(nums) - 1
while start + 1 < end:
mid = (start + end) / 2
if nums[mid] < target:
start = mid
else:
end = mid

if nums[start] == target:
return start
if nums[end] == target:
return end
return -1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: