每日两题 / 34. 在排序数组中查找元素的第一个和最后一个位置 && 33. 搜索旋转排序数组(LeetCode热题100)

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

根据二分函数,得到>=target<=target的两个,分别是答案的l和r

cpp 复制代码
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        if (nums.size() == 0) return { -1, -1 };
        vector<int> ans(2);
        int l = 0, r = nums.size() - 1;
        while (l < r) {
            int mid = (l + r + 1) / 2;
            if (nums[mid] <= target) l = mid;
            else r = mid - 1;
        }
        if (nums[l] != target) return { -1, -1 };
        ans[1] = l;
        l = 0, r = nums.size() - 1;
        while (l < r) {
            int mid = (l + r) / 2;
            if (nums[mid] >= target) r = mid;
            else l = mid + 1;
        }
        ans[0] = l;
        return ans;
    }
};

33. 搜索旋转排序数组 - 力扣(LeetCode)

先确定两个有序区间的分界点,然后分别对两个区间进行二分

需要考虑数组长度为2,且旋转过的情况

cpp 复制代码
class Solution {
public:
    int search(vector<int>& nums, int target) {
        int l = 0, r = nums.size() - 1;
        int t = 0;
        if (*nums.begin() > *nums.rbegin()) {
            while (l < r) {
                int mid = (l + r) / 2;
                if (mid - 1 >= 0 && nums[mid] < nums[mid - 1]) {
                    t = mid;
                    break;
                }
                else if (mid + 1 < nums.size() && nums[mid] > nums[mid + 1]) {
                    t = mid + 1;
                    break;
                }
                else if (nums[mid] > nums[0]) l = mid;
                else if (nums[mid] < nums[0]) r = mid;
            }
        }
        if (t) {
            auto it = lower_bound(nums.begin(), nums.begin() + t, target);
            if (it != nums.end() && *it == target) return it - nums.begin();
            it = lower_bound(nums.begin() + t, nums.end(), target);
            if (it != nums.end() && *it == target) return it - nums.begin();
            else return -1;
        }
        else {
            auto it = lower_bound(nums.begin(), nums.end(), target);
            if (it != nums.end() && *it == target) return it - nums.begin();
            else return -1;
        }
    }
};
相关推荐
王哈哈^_^2 分钟前
【完整源码+数据集】蓝莓数据集,yolo11蓝莓成熟度检测数据集 3023 张,蓝莓成熟度数据集,目标检测蓝莓识别算法系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·ai·视觉检测
王哈哈^_^14 分钟前
【完整源码+数据集】高空作业数据集,yolo高空作业检测数据集 2076 张,人员高空作业数据集,目标检测高空作业识别系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·目标跟踪·视觉检测
一条数据库21 分钟前
猫狗识别数据集:34,441张高质量标注图像,深度学习二分类任务训练数据集,计算机视觉算法研发,CNN模型训练,图像识别分类,机器学习实践项目完整数据资
深度学习·算法·机器学习
bloxd yzh31 分钟前
图论基础概念
算法
小白程序员成长日记35 分钟前
2025.11.09 力扣每日一题
算法·leetcode·职场和发展
hansang_IR36 分钟前
【题解】洛谷 P1477 [NOI2008] 假面舞会 [思维 + 图论]
c++·算法·图论·思维
天选之女wow39 分钟前
【代码随想录算法训练营——Day59】图论——47.参加科学大会、94.城市间货物运输I
算法·图论
CoovallyAIHub1 小时前
1.2MB超轻量模型实现草莓苗精准分级检测与定位,准确率超96%
深度学习·算法·计算机视觉
CoovallyAIHub1 小时前
终结AI偏见!Sony AI发布Nature论文与FHIBE数据集,重塑公平性评估基准
深度学习·算法·计算机视觉
7澄11 小时前
深入解析 LeetCode 1572:矩阵对角线元素的和 —— 从问题本质到高效实现
java·算法·leetcode·矩阵·intellij-idea