34.在排序数组中查找元素的起始和末尾位置
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
找不到输出[-1,-1]
先找到第一个nums[mid]=target的mid,然后分别查找左右。
当时觉得还不错,一运行时间和线性查找差不多。
class Solution {public int[] searchRange(int[] nums, int target) {int left=0;int right=nums.length-1;int begin=left;int end=right;while (left<=right){int mid=left+(right-left)/2;if(nums[mid]==target){if(mid-1>=0&&target>nums[mid-1]) begin=mid;else begin=search(nums,target,left,mid-1,begin,0);if(mid+1<nums.length&&target<nums[mid+1]) end=mid;else end=search(nums,target,mid+1,right,end,1);return new int[]{begin,end};}if(nums[mid]>target) right=mid-1;else left=mid+1;}return new int[]{-1,-1};}private int search(int[] nums,int target,int left,int right,int tep,int f){if(left>right) return tep;while (left<=right){int mid=left+(right-left)/2;if(nums[mid]==target){int te=search(nums,target,left,mid-1,mid,0);int ta=search(nums,target,mid+1,right,mid,1);if(f==0){return Math.min(te,ta);}else{return Math.max(ta,te);}}if(nums[mid]>target) right=mid-1;else left=mid+1;}return tep;}
}
下面这段代码十分的简介。二分,如果相等,那么看需求区间左移还是右移。
class Solution {public int[] searchRange(int[] nums, int target) {int begin=findLeft(nums,target);int end=findRight(nums,target);return new int[]{begin,end};}private int findRight(int[] nums, int target) {int ans=-1;int left=0;int right=nums.length-1;while (left<=right){int mid=left+((right-left)>>1);if(nums[mid]==target){ans=mid;left=mid+1;}else if(nums[mid]>target){right=mid-1;}else{left=mid+1;}}return ans;}private int findLeft(int[] nums,int target){int ans=-1;int left=0;int right=nums.length-1;while (left<=right){int mid=left+((right-left)>>1);if(nums[mid]==target){ans=mid;right=mid-1;}else if(nums[mid]>target){right=mid-1;}else{left=mid+1;}}return ans;}
}
34.在排序数组中查找元素的起始和末尾位置相关推荐
- LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置
前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...
- 34. 在排序数组中查找元素的第一个和最后一个位置 golang
34. 在排序数组中查找元素的第一个和最后一个位置 https://leetcode-cn.com/problems/find-first-and-last-position-of-element-i ...
- 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...
作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...
- [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置
LeetCode 专题 – 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置 难度:中等 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值 ...
- 34. 在排序数组中查找元素的第一个和最后一个位置
34. 在排序数组中查找元素的第一个和最后一个位置(两种方法记录) 法一(BP算法--使用双指针分别从前.后定位first index和last index),代码如下: class Solution ...
- 34. 在排序数组中查找元素的第一个和最后一个位置——二分法的魔鬼细节 小记
每次遇到二分法,一看就会,一写就废,在力扣上看到一篇很好的总结,因此做一下搬运工 参考题解--二分法各种情况及细节剖析,附送小诗一首 场景包括寻找一个数.寻找左侧边界.寻找右侧边界. 而且,我们就是要 ...
- 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标
34. 在排序数组中查找元素的第一个和最后一个位置 难度中等2012 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target.请你找出给定目标值在数组中的开始位置和结束位置. 如果 ...
- leetcode(34)在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置 class Solution {public int[] searchRange(int[] nums, int target) {int len = nu ...
- 62. Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置 (二分查找-局部有序)
给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.如果数组中不存在目标值 target,返回 [-1, -1].进阶:你可以设计并实现时 ...
最新文章
- iframe批量异步上传图片
- SAP Fiori 3的暗黑主题,酷炫无比
- 如何判断软件架构的好与坏
- python中调用是什么意思_在Python中调用函数的含义?
- 头条终面:写个消息中间件
- What is Freeview Play
- Linux:sudo命令实例讲解
- 详解Angular开发中的登陆与身份验证
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_1_线程安全问题的概述...
- 免费下载道客巴巴文档的方法
- 未转变者服务器bug,未转变者攻略 unturned无敌BUG说明
- c语言获取系统时间精确到毫秒,如何获取系统流逝时间(要求精确到毫秒)
- 上亿海量数据处理方法
- 建筑师杰克帮你理解框架与模式
- Hive SQL查询效率提升之Analyze方案的实施
- 天下足球--背景音乐
- ChatGPT提示词手册:学会提问的艺术,助你高效使用ChatGPT!
- android隐藏app应用程序,Android开发:怎样隐藏自己的app应用
- 安搭Share——人不要怕“变”,要守住自己的“常”
- 吃饭咯 干锅肥肠 + 掌中宝!