美文网首页
[go语言算法]二分查找,不限位置,第一个和最后一个

[go语言算法]二分查找,不限位置,第一个和最后一个

作者: Ucan先生 | 来源:发表于2019-08-18 16:05 被阅读0次
package main

import "fmt"

func binarySearch(arr []int ,val int)int  {
    left := 0;
    right:=len(arr)-1;
    for left<right {
        mid := (left+right)>>1
        if arr[mid]==val {
            return mid
        }else if arr[mid]>val {
            right = mid-1;
        }else {
            left = mid+1
        }
    }
    return -1;
}


//二分搜索数组中最后一个元素,数组分成两半,右侧是大于查找值,左右小于等于查找值。不停更新左侧,逼近右侧,同时右侧也在迭代中,最终左侧迭代到值和left相等。
func binaryLastSearch(arr []int, val int) int {
    left := 0
    right := len(arr) - 1
    for left < right {
        mid := (right+left)>>1
        if arr[mid]>val{
            right = mid-1
        }else{
            left = mid
        }
    }

    if arr[left]==val {
        return left;
    }
    return -1;
}

//和查找第一个类似,因为查找第一个,必须分成两半,左右小于,右侧保证大于等于,同样这里右侧如果右重复,右侧不断迭代到第一个相等
func binaryFirstSearch(arr []int,val int)int  {
    left := 0
    right:=len(arr)-1
    for left<right  {
        mid := (left+right)>>1
        if arr[mid] < val {
            left = mid + 1
        }else{
            right = mid
        }
    }

    if arr[left] == val {
        return left;
    }
    return -1;
}

func main()  {
    arr := []int{1,2,3,4,4,4,4,5,6}
    fmt.Println(binarySearch(arr,4))
    fmt.Println(binaryLastSearch(arr,4))
    fmt.Println(binaryFirstSearch(arr,4))
}

相关文章

  • [go语言算法]二分查找,不限位置,第一个和最后一个

  • 二分查找与二叉排序树

    二分查找 1.搜索插入位置 2. 在排序数组中查找元素的第一个和最后一个位置 3. 搜索旋转排序数组 二叉查找树 ...

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • 算法

    一.算法基础--算法的特性 二.算法基础--算法的复杂度 三.顺序查找和二分查找 顺序查找 二分查找(前提是有序的...

  • 面试题53_1:在排序数组中查找数字

    统计一个数字在排序数组中出现的次数。 思路一:直接查找,或者利用二分查找出k第一个元素和最后一个元素分别的位置,统...

  • 算法之二分查找

    二分查找 二分查找是著名、高效并有应用广泛的查找算法。 二分常规实现 1.循环实现 下面我用python语言实现循...

  • 算法图解-二分查找

    二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null...

  • 算法系列之二分查找法

    概述 二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含列表中,二分查找返回其位置; 否则返回n...

  • 数据结构与算法系列——二分查找

    二分查找算法的简单介绍 今天我们来学习一下二分查找算法,也叫做折半查找算法。使用二分查找算法的前提是数据需要是有序...

  • swtich-case的实现原理与优化

    实现原理 语言的底层就是算法,所以switch-case的底层也是算法: 数组和二分查找。switch-case是...

网友评论

      本文标题:[go语言算法]二分查找,不限位置,第一个和最后一个

      本文链接:https://www.haomeiwen.com/subject/qfnrsctx.html