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

每天一道算法题【蓝桥杯】【在排序数组中查找元素的第一个位置和最后一个位置】

在这里插入图片描述

思路

本题为查找左边界和右边界的标准模型

查找左边界

int left = 0, right = nums.size() - 1, mid = 0; //查找左边界
while (left < right)
{
mid = left + (right - left) / 2;
if (nums[mid] < target) left = mid + 1;
else right = mid;
}

查找右边界

int left = 0, right = nums.size() - 1, mid = 0;
while (left < right)
{
mid = left + (right - left + 1) / 2;
if (nums[mid] <= target) left = mid; //查找右边界
else right = mid - 1;
}

#define _CRT_SECURE_NO_WARNINGS 1
#include<vector>
using namespace std;
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        if (nums.size() == 0)return{ -1,-1 };  //注意处理边界问题
        int left = 0, right = nums.size() - 1, mid = 0; //查找左边界
        vector<int> ret;
        while (left < right)
        {
            mid = left + (right - left) / 2;
            if (nums[mid] < target) left = mid + 1;
            else right = mid;
        }
        ret.push_back(left);
        right = nums.size() - 1, mid = 0;
        while (left < right)
        {
            mid = left + (right - left + 1) / 2;
            if (nums[mid] <= target) left = mid;    //查找右边界
            else right = mid - 1;
        }
        ret.push_back(right);//插入到ret表中
        if (nums[right] == target) return ret;
        else return{ -1,-1 };
    }
};

http://www.kler.cn/a/581046.html

相关文章:

  • 【MySQL篇】MySQL基本查询详解
  • 【推荐项目】Java的廊坊城市公交查询网站
  • 光谱相机检测肉类新鲜度的原理
  • 查看端口被占用命令
  • VMware安装Windows server 2016
  • # 如何确认elementary os (linux)使用的是Wayland而不是x11?
  • 【C语言】结构体篇
  • 联核科技AGV无人叉车能给企业带来哪些效益?
  • 【面试】JVM
  • 计算机考研C语言
  • C++设计模式-工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
  • 工作记录 2017-01-04
  • 【CXX】6 内置绑定
  • Redis--Set类型
  • JVM、MySQL常见面试题(尽力局)
  • vue3中的深度选择器
  • Python----数据可视化(Seaborn合集:介绍,应用,绘图,使用FacetGrid绘图)
  • 每天一道算法题【蓝桥杯】【最长递增子序列】
  • MVCC的理解(Multi-Version Concurrency Control,多版本并发控制)
  • Spring (十)事务