题解 | #二分查找-Go语言实现#

二分查找-II

http://www.nowcoder.com/practice/4f470d1d3b734f8aaf2afb014185b395

概述

我所实现的二分查找算法的代码,有两种代码实现方式。分别是函数递归调用和循环二分查找的方式。二者的不同在于,基于函数递归调用的方式,优势是代码实现直观且简单,仅需要按查找要求不断调用search函数进行不断查询即可,缺点是内存空间占用量大。基于循环二分查找的方式,缺点是没有递归调用实现那么简单,实现过程中很容易出现某一处条件遗漏考虑的情况,但是优势在于内存空间占用量小

具体二者代码如下:

基于递归调用实现二分的方式:

func search( nums []int ,  target int ) int {
    // write code here
    n:=len(nums)
    if n==0{
        return -1
    }
    if n>=2{
       k:=n/2
       left:=nums[:n/2]
        if re:=search(left,target);re!=-1{
            return re
        }
        right:=nums[n/2:]
        if re:=search(right,target);re!=-1{
            return re+k
        }
    }
    if target==nums[0] {
        return 0
    }else{
        return -1
    }
}

基于循环实现二分查找的方式:

func search( nums []int ,  target int ) int {
    // write code here
    n:=len(nums)
    if n==0{
        return -1
    }
    left:=0;
    right:=n-1
    mid:=(left+right)/2
    for n>1{
        if mid -1>=0{
            if target==nums[mid] && target>nums[mid-1] {
                return mid
            }
        }else if target==nums[mid]{
            return mid;
        }
        if (left+right) %2!=0{
           if target==nums[mid+1] && target > nums[mid]{
               return mid+1
            }
        }
        if nums[mid]<target{
            left=mid
        }else {
            right=mid
        }
        mid=(left+right)/2
    }
    return -1
}
全部评论

相关推荐

10-30 19:23
已编辑
山东大学(威海) C++
牛至超人:我了个雷 1.实习经历写太长了吧,精简一点,你写那么老多,面试官看着都烦 2.项目经历你放俩竞赛干啥单独拿出来写上几等奖就行了呗 3.一大雷点就是项目经历里的那个课程设计,大家都知道课程设计巨水,不要写课程设计,换一个名字,就叫学生管理系统,面试官问就说是自己做的项目,不要提课程设计的事 4.那个交流经历,简化一下塞到最上面的教育经历里就行了 5.简历尽量一页纸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务