zoukankan      html  css  js  c++  java
  • LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置

    1、题目描述

    给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

    你的算法时间复杂度必须是 O(log n) 级别。

    如果数组中不存在目标值,返回 [-1, -1]

    示例 1:

      输入: nums = [5,7,7,8,8,10], target = 8

      输出: [3,4]

    示例 2:

      输入: nums = [5,7,7,8,8,10], target = 6

      输出: [-1,-1]

    2、题解

    2.1、解法一

    class Solution:
        def searchRange(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: List[int]
            """
            n = len(nums)
            if n == 1:
                if target == nums[0]:
                    return [0,0]
                else:
                    return [-1,-1]
            first,last = 0, n-1
    
            r_list = []
            while first <= last:
    
                mid = int((first + last)/2)
                print(mid)
                if nums[mid] == target:
                    left,right = mid,mid+1
                    while first <= left and nums[left] == target:
                        left -= 1
                    print(r_list)
                    while right <= last and nums[right] == target:
                        right += 1
                    r_list = [left+1,right-1]
                    return r_list
                elif target > nums[mid]:
                    # 目标值大于中间值
                    first = mid + 1
                else:
                    # 目标值小于中间值
                    last = mid - 1
                print(first,last)
            return [-1, -1]
    

      

  • 相关阅读:
    MFC 中 Tooltip 实现的几种方式
    C++11带来的优雅语法
    socket异步编程--libevent的使用
    单元测试与解耦
    Ubuntu(Linux) + mono + jexus +asp.net MVC3
    常见算法总结
    NET里简易实现AOP
    KMP算法
    简易的集群通讯组件
    数据访问层的封装与抽象
  • 原文地址:https://www.cnblogs.com/bad-robot/p/10065139.html
Copyright © 2011-2022 走看看