题解 | #找出特定体重的牛群#

找出特定体重的牛群

https://www.nowcoder.com/practice/bbc4c61a5bb64f329663b300a634ae6a

大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

这道题目同样考察二分查找算法的应用。

题目解答方法的文字分析

给定一个非递增的体重数组和一个目标体重 target,要求找出给定体重的牛在牛棚中的起始位置和结束位置。由于要求时间复杂度为 O(log n),我们可以使用二分查找算法来解决。

思路步骤如下:

  1. 初始化两个指针 leftright 分别指向数组的第一个和最后一个元素。
  2. 在每一轮二分查找中,计算中间元素的下标 mid
  3. 如果 weights[mid] == target,说明找到了一个目标体重的牛,需要继续查找它的起始位置和结束位置。
  4. 初始化 startend 变量为 mid,然后向左查找起始位置,直至 weights[start] 不等于 target
  5. 向右查找结束位置,直至 weights[end] 不等于 target
  6. 返回起始位置和结束位置,如果找不到,返回 {-1, -1}

本题解析所用的编程语言

本题解析所用的编程语言是C++。

完整且正确的编程代码

class Solution {
public:
    vector<int> searchRange(vector<int>& weights, int target) {
        vector<int> result = {-1, -1}; // 初始化结果数组,起始位置和结束位置均为 -1
        int left = 0, right = weights.size() - 1;

        while (left <= right) {
            int mid = left + (right - left) / 2; // 计算中间元素的下标

            if (weights[mid] == target) {
                // 查找起始位置
                int start = mid;
                while (start >= 0 && weights[start] == target) {
                    start--;
                }

                // 查找结束位置
                int end = mid;
                while (end < weights.size() && weights[end] == target) {
                    end++;
                }

                result[0] = start + 1; // 设置起始位置
                result[1] = end - 1;   // 设置结束位置
                return result;         // 返回结果数组
            }

            if (weights[mid] > target) {
                left = mid + 1; // 如果中间元素大于目标值,说明目标值在左半部分,将左指针移动到 mid + 1
            } else {
                right = mid - 1; // 如果中间元素小于目标值,说明目标值在右半部分,将右指针移动到 mid - 1
            }
        }

        return result; // 如果没有找到目标值,返回结果数组
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!

阿Q的题解 文章被收录于专栏

阿Q秋招刷过的题

全部评论

相关推荐

已注销:bro不如吃顿疯狂星期四
点赞 评论 收藏
分享
真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务