leetcote34. 在排序数组中查找元素的第一个和最后一个位置
一:题目
二:上码(暴力+二分)
// class Solution {// public:
// /**
// 思路:1.首先这是一个升序的 那么相同的一定是会相连的// */// vector<int> searchRange(vector<int>& nums, int target) {// int flag = 0;
// int start = 0;// for(int i = 0; i < nums.size(); i++) {// if (nums[i] == target){// if(flag == 0) start = i;
// flag++;
// }
// }
// if(flag == 0) return {-1,-1};// return {start,start+flag-1};
// }
// };class Solution {public:/**思路:1.这里分为3种情况1>当taget比nums的左边界还小的时候, terget比nums右边界还大的时候 返回{-1,-1}2>当target在nums中时候 那么我们就需要寻找target的左右边界寻找右边界 就是由当我们找到nums[mid] = target的时候 然后由left 不断逼近taget的右边界寻找左边界 就是当我们的nums[mid] = target的时候,然后 由right 不断逼近target的左边界3>当target在nums中且不存在的时候 返回{-1,-1}*/vector<int> searchRange(vector<int>& nums, int target) {int leftAns = leftBoder(nums,target);int rightAns = rightBoder(nums,target);//情况一if(rightAns == -2 || leftAns == -2) return {-1,-1};//情况二if(rightAns - leftAns > 1) return {leftAns+1,rightAns-1};//情况三return {-1,-1};}int rightBoder(vector<int>& nums,int target) {int left = 0;int right = nums.size()-1;int rightAns = -2;//num中没有target的话 做个标记while (left <= right) {int mid = (left + right)/2;if(nums[mid] > target) {right = mid -1;}else{//nums[mid] = target的时候 然后由left 不断逼近taget的右边界left = mid + 1;rightAns = left;}}return rightAns;}int leftBoder(vector<int>& nums,int target) {int left = 0;int right = nums.size()-1;int leftAns = -2;//num中没有target的话 做个标记while (left <= right) {int mid = (left + right)/2;if(nums[mid] < target) {left = mid + 1;}else{//nums[mid] = target的时候,然后 由right 不断逼近target的左边界right = mid - 1;leftAns = right;}}return leftAns;}};
leetcote34. 在排序数组中查找元素的第一个和最后一个位置相关推荐
- 算法----- 在排序数组中查找元素的第一个和最后一个位置
题目: 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.你的算法时间复杂度必须是 O(log ...
- python 在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.如果数组中不存在目标值 target,返回 ...
- LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置
前言 国庆前最后一次打卡,国庆后继续开启,公众号bigsai回复进群欢迎加入打卡,如有帮助记得点赞收藏. 近期打卡记录: LeetCode 32最长有效括号(困难) (本周) LeetCode 30串 ...
- leetcode(34)在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置 class Solution {public int[] searchRange(int[] nums, int target) {int len = nu ...
- 34. 在排序数组中查找元素的第一个和最后一个位置 golang
34. 在排序数组中查找元素的第一个和最后一个位置 https://leetcode-cn.com/problems/find-first-and-last-position-of-element-i ...
- 去掉数组最后一个元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置每天刷一道leetcode算法系列!...
作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...
- 20200221:在排序数组中查找元素的第一个和最后一个位置(leetcode34)
在排序数组中查找元素的第一个和最后一个位置 题目 思路与算法 代码实现 题目 思路与算法 题目要求了算法复杂度为O(logN),因此必须是二分查找来实现,但是其实最简单的思路应该就是顺序和逆序的遍历了 ...
- 力扣——在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返 ...
- [算法]LeetCode 专题 -- 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置
LeetCode 专题 – 二分查找专题 34. 在排序数组中查找元素的第一个和最后一个位置 难度:中等 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值 ...
最新文章
- 电脑字体在哪个文件夹_电脑键盘使用方法
- java版spring cloud+spring boot+redis社交电子商务平台(四)SpringBoot 整合JPA
- 没学过编程能学python吗_没有编程基础,可以自学Python吗?
- JZOJ 5407. 【NOIP2017提高A组集训10.21】Deep
- 【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
- web前端模块化开发_真正的模块化Web应用程序:为什么没有开发标准?
- JSP中的:request.getScheme()+://+request.getServerName()+:+request.getServer
- Python魔法方法(magic method)细解几个常用魔法方法(下)
- 使用 ASP.NET Core Razor 页、Web API 和实体框架进行分页和排序
- Linux 命令(123)—— iostat 命令
- 断网重启路由器就好_每天都要重启路由器?难怪WIFI越用越慢,宽带师傅透露其中窍门...
- 4选1数据选择器 testbench代码编写
- 基于YOLOv5的车辆识别系统
- Matlab归一化方法
- c语言结构体数组怎么初始化,c语言结构体数组初始化
- NYNU开学大作战之补番真开心
- dd命令 刻录U盘启动
- SonarQube安装以及结合idea使用详细步骤
- MySQL填坑系列--Linux平台下MySQL区分大小写问题
- 右击计算机管理打开会闪退,win10应用商店为什么会闪退 win10应用商店出故障怎么修复...
热门文章
- Django04-1: ORM增删改查
- oracle的除,Oracle数据库如何去除别名 - daiyan0526的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- 【专升本计算机】专升本计算机期末考试复习题(A卷附答案)
- Android之运行的错误:java.lang.UnsatisfiedLinkError: Couldn‘t find cibloger.so
- 链表之删除单链表倒数第K个节点
- Android之使用PopupWindow使用和总结
- 在n个火柴里面拿3根出来拼接成最大三角形的周长
- 11选5下期算法_本周六周日【高二直播】辅导网课预告:通用技术电控二三极管、多用电表测量、数字逻辑电路、解析枚举递归算法,2022浙江选考技术...
- 软件项目组织管理(五)项目范围管理
- 看完这些自动化原理图,有一种豁然开朗的感觉