递归或者循环实现last position of target

题目:在一个排序数组(从小到大)中找一个数,返回该数出现的最后一个位置,如果不存在,返回-1
给出数组 [1, 2, 2, 2,4, 5, 5]
对于 target = 2, 返回 3.
对于 target = 5, 返回 6.
对于 target = 6, 返回 -1.

解题思路:

在二分搜索上做改进。

递归实现:


def last_position(array,low,high,key):

  mid = int((high-low)/2 + low)

  if low > high :

    return -1

  if low == high:#说明范围已经缩小到一个数(这样处理是为了防止数组越界)

    return low

  elif array[mid] > key:

    return last_position(array,low,mid-1,key)

  elif array[mid] < key:

    return last_position(array,mid+1,high,key)

  elif array[mid+1] == key:#不是最后一个位置,所以要接着搜索

    return last_position(array,mid+1,high,key)

  else:

    return mid

循环实现:

def lastPosition(A, target):

  if not A:

    return -1

  start, end = 0, len(A) - 1

  while start + 1 < end:

    mid = start + (end - start) / 2

    if A[mid] <= target:

      start = mid

    else:#最后位置的要求

      end = mid

  if A[end] == target:

    return end

  if A[start] == target:

    return start

  return -1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,792评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,260评论 19 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,281评论 0 4
  • 看到家里那些还挂着标签的衣服,看到手机里那些从未打开过的网课,看到抽屉里堆积着的那些旅游时带回来的特产....
    卷毛卷不卷阅读 185评论 0 3