go解题答案

  • 时间复杂度O(n)
  • 思路概括:首位指针遍历
  • 思路核心:
    1、首位指针做循环条件,middel做比较
    2、找到后用一个for循环找到最靠前的索引
    func search( nums []int ,  target int ) int {
      if len(nums)==0{
          return -1
      }
      ans:=-1
      start,end:=0,len(nums)-1 // 首位指针来做循环条件
      for start<=end{
          m:=start + (end-start)/2 //此写法不溢出
          if target == nums[m]{
              ans=m
              break
          }else if target < nums[m]{
              end=m-1
          }else {
              start=m+1
          }
      }
      // 因为会有重复,向前更新索引
      for ans >= 1 {
          if nums[ans-1] == target {
              ans -= 1
          } else {
              break
          }
      }
      return ans
    }

    如果有帮助请点个赞哦, 更多文章请看我的博客

    题主背景

  • 从业8年——超级内卷500Q技术经理——目前专注go和微服务架构