Time: 20190909
Type: Medium

题目描述

给定一个按照升序排列的整数数组 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]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

用比较冗余的写法,分别两次二分搜索寻找第一个和最后一个元素。

代码

class Solution(object):def searchRange(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""if len(nums) < 1:return [-1, -1]res = []# 寻找第一个位置start, end = 0, len(nums) - 1while start + 1 < end:mid = start + (end - start) // 2if nums[mid] == target:# 向前半部分走end = midelif nums[mid] < target:start = midelse:end = midif nums[start] == target:res.append(start)elif nums[end] == target:res.append(end)else:res.append(-1)# 寻找最后一个位置start, end = 0, len(nums) - 1while start + 1 < end:mid = start + (end - start) // 2if nums[mid] == target:start = midelif nums[mid] < target:start = midelse:end = midif nums[end] == target:res.append(end)elif nums[start] == target:res.append(start)else:res.append(-1)return res

END.

Leetcode 34.排序数组中的第一个元素和最后一个元素相关推荐

  1. leetcode 从排序数组中删除重复项(C++)

    从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间 ...

  2. leetcode 在排序数组中查找元素的第一个和最后一个位置

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 进阶: 你可以设计并 ...

  3. LeetCode删除排序数组中的重复项(Java实现)

    原题: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件 ...

  4. leetcode 删除排序数组中的重复项

    161 / 161 个通过测试用例 状态:通过 执行用时:177 ms 内存消耗:50.4 MB 提交时间:6 月,3 周之前 class Solution {public int removeDup ...

  5. LeetCode 25K 个一组翻转链表26删除排序数组中的重复项

    如果问题或者其他方法还请分享,如加入打卡微信搜索bigsai回复进群一起打卡. K个一组翻转链表 题目要求 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小 ...

  6. vue删除数组中的一条数据_删除排序数组中的重复项 II

    删除排序数组中的重复项 II题目 给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改 ...

  7. LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置

    前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...

  8. 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...

    作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...

  9. [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置

    LeetCode 专题 – 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置 难度:中等 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值 ...

最新文章

  1. centos 系统使用verdaccio搭建npm私库
  2. Numerical Geometry of Image
  3. 算法-----数组-----移除特定元素
  4. Telent 远程登录服务
  5. ArrayBlockingQueue原理分析-itrs.elementDequeued()
  6. 个人博客 | 网站部署终极操作:一行命令搞定!
  7. matlab resample,resample matlab实现
  8. JEECG Online开发教程专题视频-张代浩-专题视频课程
  9. 阿里云数据中台训练营第一期圆满落幕
  10. c 连接mysql数据库查询_C语言实现访问及查询MySQL数据库的方法
  11. .gitignore文件不生效解决方法
  12. ImageView中的几个属性
  13. MyEclipse服务器远程调试
  14. 【算法集训 | 暑期刷题营】7.19题---回溯与剪枝
  15. 网站访客QQ获取系统
  16. android接收红外传感器发送的脉冲信号,esp8266_sdk_ir_rx_tx红外遥控示例
  17. Zotero配合坚果云Web DAV同步那些坑
  18. LeetCode 1905. 统计子岛屿
  19. 视频处理系列︱利用达摩院ModelScope进行视频人物分割+背景切换(一)
  20. yum-utils与yum-config-manager

热门文章

  1. 数据结构上机实践第四周项目1 - 建立单链表
  2. Linux C编程之流操作fopen函数的mode
  3. 使用Typora绘制流程图
  4. android xutils3 jar,android xutils3 Android基于开源项目xutils3实现下载
  5. 前轮转向最大角度设计原来_五桥转向故障
  6. php 农历日历,php下实现农历日历的代码_php实例
  7. python可用编程模块规模多大_哪些Python模块可用于编程竞赛?
  8. @param注解什么意思_Java反射是什么?看这篇绝对会了!
  9. java解析字符串方法_java字符串的截取方法substring()代码解析
  10. android回收内存保存变量,android基础之onSaveInstanceState用法(一)保存容易被回收的自定义类的静态全局变量...