网站开发团队哪些人,怎么优化网站代码,建设部网站材料价格上涨规定,无锡专业做网站的#x1f680; 算法题 #x1f680; #x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 #x1f340; #x1f332; 越难的东西,越要努力坚持#xff0c;因为它具有很高的价值#xff0c;算法就是这样✨ #x1f332; 作者简介#xff1a;硕风和炜#xff0c;… 算法题 算法刷题专栏 | 面试必备算法 | 面试高频算法 越难的东西,越要努力坚持因为它具有很高的价值算法就是这样✨ 作者简介硕风和炜CSDN-Java领域新星创作者保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享 恭喜你发现一枚宝藏博主,赶快收入囊中吧 人生如棋我愿为卒行动虽慢可谁曾见我后退一步 算法题 目录 题目链接⛲ 题目描述 求解思路实现代码运行结果⚡ 二分 求解思路 实现代码 运行结果 共勉 题目链接
34. 在排序数组中查找元素的第一个和最后一个位置
⛲ 题目描述
给你一个按照非递减顺序排列的整数数组 nums和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
示例 1
输入nums [5,7,7,8,8,10], target 8 输出[3,4] 示例 2
输入nums [5,7,7,8,8,10], target 6 输出[-1,-1] 示例 3
输入nums [], target 0 输出[-1,-1]
提示
0 nums.length 105 -109 nums[i] 109 nums 是一个非递减数组 -109 target 109 求解思路实现代码运行结果 ⚡ 二分 求解思路
根据题目的要求我们需要找到大于等于target最左侧的元素我们通过二分来求解。因为题目让我们求解的是等于target的第一个元素位置和最后一个元素位置所以我们进行俩次二分查找第一次二分直接去找target第二次二分去找target1。需要注意的是第一次二分结束的时候我们需要判断当前位置是否超过了数组的长度或者是当前位置的元素是否等于target如果满足任意一个直接返回{-1,-1}。实现代码如下所示 实现代码
class Solution {public int[] searchRange(int[] nums, int target) {int l binarySerach(nums, target);if (l nums.length || nums[l] ! target) {return new int[] { -1, -1 };}int r binarySerach(nums, target 1) - 1;return new int[] { l, r };}public int binarySerach(int[] nums, int target) {int n nums.length;int left -1, right n;while (left 1 right) {int mid left right 1;if (nums[mid] target) {right mid;} else {left mid;}}return right;}
}运行结果 共勉
最后我想和大家分享一句一直激励我的座右铭希望可以与大家共勉