小米嵌入式软件工程师笔试 10-14

订阅专栏,方便查阅!!!

《嵌入式软件开发笔试与面试手册》https://blog.nowcoder.net/zhuanlan/jvN8gj

《软件开发笔试汇总》https://blog.nowcoder.net/zhuanlan/0oDWVm

数组处理

时间限制:1000MS内存限制:65536KB

题目描述

刷掉一个元素以后全为1的最长子数组。

给定一个二进制数组 nums ,你需要从中删掉一个元素。

请你在删掉元素的结果数组中,返回最长的且只包合 1 的非空子数组的长度。

如果不存在这样的子数组,请返回 0

输入描述

一个二进制数组

限制; 1length(二进制数组)<10^4

输出描述

删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。

样例输入

[1,1,0,1]

样例输出

3

提示

删掉位置 2 的数后,[1,1,1] 包含 3 1

#include <iostream>
#include <vector>
#include <string>
#include <sstream>

using namespace std;

vector<int> split(const string &s, char c) {
    stringstream ss(s);
    string item;
    vector<int> elems;
    while (getline(ss, item, c)) {
        elems.push_back(stoi(item));
    }
    return elems;
}

int maxLengthAfterRemove(const vector<int>& nums) {
    int n = nums.size();
    vector<pair<int, int>> segments;
    int start = -1;
    
    for (int i = 0; i < n; ++i) {
        if (nums[i] == 1) {
            if (start == -1) start = i;
        } else {
            if (start != -1) {
                segments.push_back({start, i - 1});
                start = -1;
            }
        }
    }
    if (start != -1) {
        segments.push_back({start, n - 1});
    }

    int maxLen = 0;
    for (int i = 0; i < segments.size(); ++i) {
        int len = segments[i].second - segments[i].first + 1;
        if (i < segments.size() - 1 && segments[i + 1].first - segments[i].second == 2)

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。

全部评论

相关推荐

评论
3
8
分享

创作者周榜

更多
牛客网
牛客企业服务