牛客: BM17 二分查找-I

牛客: BM17 二分查找-I

文章目录

  • 牛客: BM17 二分查找-I
  • 题目描述
  • 题解思路
  • 题解代码

题目描述

牛客: BM17 二分查找-I_第1张图片

题解思路

一个左端点, 一个右端点, 循环直到左右端点交叉, 取左右端点的中点

若中点的值大于目标值, 意味着目标值只可能在中点的左边, 所以右端点变为中点的前一个位置

若中点的值小于目标值, 意味着目标值只可能在中点的右边, 所以左端点变为中点的后一个位置

若中点的值等于目标值, 则返回当前中点

循环结束还未找到, 意味着不存在目标值, 返回-1

题解代码

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @param target int整型 
 * @return int整型
*/
func search( nums []int ,  target int ) int {
    // write code here
    left, right := 0, len(nums) - 1

    for left <= right {
        mid := (left + right) >> 1
        num := nums[mid]
        if num > target {
            right = mid - 1
        } else if num < target {
            left = mid + 1
        } else {
            return mid
        }
    }

    return -1
}

你可能感兴趣的:(算法,数据结构,go)