LintCode 458 [Last Position of Target]

原题

在一个排序数组中找一个数,返回该数出现的最后一个位置,如果不存在,返回-1

给出数组 [1, 2, 2, 4, 5, 5]

  • 对于 target = 2, �返回 2.
  • 对于 target = 5, �返回 5.
  • 对于 target = 6, �返回 -1.

解题思路

  • 二分法,对于找最后一个位置的要求:只有target大于A[end]才会end = mid

完整代码

class Solution:
    # @param {int[]} A an integer array sorted in ascending order
    # @param {int} target an integer
    # @return {int} an integer
    def lastPosition(self, A, target):
        # Write your code here
        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,767评论 0 33
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,498评论 0 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • caoxia阅读 153评论 0 2
  • 再见她的时候 感觉身体消瘦了好多 而留在我印象里的, 还记得她是胖胖的 头发上的丝丝银白 也是诉说着岁月的变迁 在...
    芬芬vstar阅读 407评论 0 0