当前位置: 首页 > news >正文

网站手机微信三合一怎么做泉州seo报价

网站手机微信三合一怎么做,泉州seo报价,新闻网站开发教程,安徽城乡建设部网站首页第一此次想到的解法是首先使用二分查找在排序数组中查找到一个指定元素&#xff0c;随后对该元素左右进行遍历&#xff0c;找到起始位置和结束位置&#xff0c;代码如下&#xff1a; class Solution { public:vector<int> searchRange(vector<int>& nums, int…

第一此次想到的解法是首先使用二分查找在排序数组中查找到一个指定元素,随后对该元素左右进行遍历,找到起始位置和结束位置,代码如下:

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int size = nums.size();int min = 0;int max = size - 1;while(min <= max){int mid = min + (max - min)/2;if(target < nums[mid]){max = mid - 1;}else if(target > nums[mid]){min = mid + 1;}else{while(nums[min] != target){min++;}while(nums[max] != target){max--;}return {min,max};}}return {-1,-1};}
};

执行虽然通过,但测试用时并不是很理想,在 代码随想录 看到的解法是将题目分为三种情况:

  • 情况一:target 在数组范围的右边或者左边,例如数组{3, 4, 5},target为2或者数组{3, 4, 5},target为6,此时应该返回{-1, -1}
  • 情况二:target 在数组范围中,且数组中不存在target,例如数组{3,6,7},target为5,此时应该返回{-1, -1}
  • 情况三:target 在数组范围中,且数组中存在target,例如数组{3,6,7},target为6,此时应该返回{1, 1}

采用二分法来分别寻找左边界和右边界,最终分情况进行return。代码如下:

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int leftBorder = getLeftBorder(nums, target);int rightBorder = getRightBorder(nums, target);// 情况一if (leftBorder == -2 || rightBorder == -2) return {-1, -1};// 情况三if (rightBorder - leftBorder > 1) return {leftBorder + 1, rightBorder - 1};// 情况二return {-1, -1};}
private:int getRightBorder(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;int rightBorder = -2; // 记录一下rightBorder没有被赋值的情况while (left <= right) {int middle = left + ((right - left) / 2);if (nums[middle] > target) {right = middle - 1;} else { // 寻找右边界,nums[middle] == target的时候更新leftleft = middle + 1;rightBorder = left;}}return rightBorder;}int getLeftBorder(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;int leftBorder = -2; // 记录一下leftBorder没有被赋值的情况while (left <= right) {int middle = left + ((right - left) / 2);if (nums[middle] >= target) { // 寻找左边界,nums[middle] == target的时候更新rightright = middle - 1;leftBorder = right;} else {left = middle + 1;}}return leftBorder;}
};

将上述代码的两个二分查找函数进行合并:

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {int leftBorder = getBorder(nums, target, true);int rightBorder = getBorder(nums, target, false);// 情况一if (leftBorder == -2 || rightBorder == -2) return {-1, -1};// 情况三if (rightBorder - leftBorder > 1) return {leftBorder + 1, rightBorder - 1};// 情况二return {-1, -1};}
private:int getBorder(vector<int>& nums, int target, bool flag) {int left = 0;int right = nums.size() - 1;int border = -2;while (left <= right){int middle = left + (right - left)/2;if(flag) { //flag = true,返回左边界if (nums[middle] >= target) { // 寻找左边界,nums[middle] == target的时候更新rightright = middle - 1;border = right;} else {left = middle + 1;}}else{if (nums[middle] > target) {right = middle - 1;} else { // 寻找右边界,nums[middle] == target的时候更新leftleft = middle + 1;border = left;}}}return border;}};
http://www.dt0577.cn/news/53600.html

相关文章:

  • 东营市住房和建设委员会网站百度推广费
  • 做运营需要知道素材网站百度竞价点击神器奔奔
  • 青岛的网站建设有没有免费的广告平台
  • xml网站地图格式网站网络推广运营
  • 东莞专业微网站建设简述网站推广的方法
  • 聚享游网站如何做推广湖南网站建站系统哪家好
  • 机械毕业设计代做网站网站推广途径和推广要点有哪些?
  • 广州响应式网站建设百度引擎入口
  • 株洲做网站优化友联互换
  • 怎么做网站二级页面抖音seo代理
  • 苏州网站建设万户seo网站整站优化
  • 网站建设中 模板怎么做信息流广告代理商
  • 郑州百度网站推广关键词免费
  • 珠海门户网站建设哪家专业想要网站导航正式推广
  • 祥云平台做的网站效果好各大搜索引擎网址
  • 建站之星免费个人博客网页制作
  • 杭州网站开发响应式seo长沙
  • 网站做图片网络推广的平台
  • 销售网站建设怎么做广告软文范例大全100
  • 外贸网站建设步骤网站怎么做推广和宣传
  • 网站制作一条龙个人能接广告联盟吗
  • 网站方案制作的培训长沙哪里有网站推广优化
  • 公司网站如何做seo怎么样关键词优化
  • 人大信息网站建设方案搜索关键词
  • 3g网站开发seo专业培训课程
  • h5网站开发流程seo技术分享
  • 公司网站建设需求说明书seo门户网
  • 什么是网站建设与管理2021最近最火的关键词
  • 委托网站开发合同网站建设黄页
  • asp网站压缩seo服务深圳