2026华为OD机考新系统真题|HTTP 访问日志峰值请求数(2026.11.08)

深入解析CRC16查表法:从原理到Modbus协议实践 本文深入解析了CRC16查表法的核心原理与实现,重点阐述了其“空间换时间”的优化思想。通过对比直接计算法,详细说明了查表法如何通过预计算表格将计算速度提升数十倍,并提供了完整的Modbus CRC16查表法代码生成、解析及实战避坑指南,帮助开发者在嵌入式及工业通信场景中高效实现可靠的数据校验。 阅读详情

HTTP 访问日志峰值请求数(2026.11.08)

2026年最新华为OD机考题库(按考点分类): 2026年最新华为OD机考题库

题目描述:

网关为每个到达的 HTTP 请求记录一行访问日志(含方法、路径、时间戳)。给定按到达顺序排列的日志与窗口大小 windowMs,以每条请求的时间戳作为窗口左端点 t,求半开窗口 [t, t+windowMs) 内最多包含多少条请求。

输入描述

输入为一个字符串,格式为 “windowMs METHOD PATH TIMESTAMP METHOD PATH TIMESTAMP …”:首字段为 windowMs,其后每三个字段为一条请求(METHOD、PATH、TIMESTAMP),字段之间以单个空格分隔。TIMESTAMP 按到达顺序非递减。

数据范围

  • 0 <= windowMs <= 10^9
  • 0 <= TIMESTAMP <= 10^9,且按到达顺序非递减(允许同一毫秒有多条请求)
  • METHOD、PATH 均不含空格

输出描述

返回一个整数:所有以请求时间戳为左端点的半开窗口 [t, t+windowMs) 中包含请求数的最大值;windowMs = 0 或无请求时返回 0。

样例

用例输入 1

"1000 GET /api/users 1000 GET /api/users 1200 POST /login 1500 GET /api/users 1800 GET /api/users 2050"

用例输出 1

4

用例解释 1

时间戳为 [1000, 1200, 1500, 1800, 2050],以左端 1000 的窗口 [1000, 2000) 包含 4 条请求。

用例输入 2

"1000 GET /api/users 1000 POST /login 1000 GET /api/orders 1000 GET /api/users 2000 GET /api/users 2500"

用例输出 2

3

用例解释 2

前 3 条请求的时间戳都是 1000,窗口 [1000, 2000) 包含 3 条请求(2000 落在右端点,半开区间不包含)。

用例输入 3

"0 GET /api/users 1000 GET /api/users 2000"

用例输出 3

0

用例解释 3

windowMs = 0,半开窗口为空,返回 0。

来源

本题来源于网络、非官方材料、仅供学习交流,侵删




🧠 解题思路

第一步:题意转化

每条请求只关心它的时间戳,方法和路径对答案没有影响。所以先把字符串按空格切开:第 0 个字段是 windowMs,之后每 3 个字段是一条请求,其中第 3 个字段是时间戳。把所有时间戳按原顺序放进数组 times。

因为题目保证时间戳按到达顺序非递减,所以 times 是一个有序(允许相等)的数组。

第二步:为什么不能对每个左端点都从头数

如果对每个左端点 t 都扫描整个数组,统计满足 t <= times[j] < t + windowMs 的 j,时间复杂度是 O(n^2)。当请求很多时会超时。

注意到窗口右端点只会随着左端点向右移动而单调向右移动:左端点变大时,t + windowMs 也变大,原来在窗口里的请求不会因为左端点右移而需要重新从更左边找。因此可以用双指针。

第三步:双指针维护半开窗口

用 left 表示当前窗口左端点对应的请求下标,right 表示第一个不满足 times[right] < times[left] + windowMs 的下标。

  • 初始 left = 0,right = 0。
  • 对每个 left,如果 right < left,先把 right 拉到 left(保证窗口至少包含左端点本身)。
  • 然后不断让 right 右移,直到 right 越界或 times[right] >= times[left] + windowMs。
  • 此时窗口 [left, right) 内的请求数就是 right - left,用它更新答案。

因为 right 只增不减,整个过程每个下标最多被访问两次,时间复杂度 O(n)。

第四步:特殊规则

  • windowMs = 0 时,半开窗口 [t, t) 为空,答案固定为 0。
  • 没有请求时也返回 0。
  • 右端点是开区间:时间戳恰好等于 t + windowMs 的请求不算进窗口。

用样例 1 走一遍

输入解析后 windowMs = 1000,times = [1000, 1200, 1500, 1800, 2050]。

lefttimes[left]窗口右界 times[left]+1000right 移动后窗口内数量 right-leftbest
0100020004(2050 >= 2000 停止)44
112002200544
215002500534
318002800524
420503050514

最终输出 4。

⚠️ 易错点

  • windowMs = 0 时必须直接返回 0,不能把窗口当成包含左端点。
  • 右端点是开区间,时间戳等于 t + windowMs 的请求不能计入。
  • 时间戳可能相同,双指针移动条件要用 times[right] < times[left] + windowMs,不能写成 <=。
  • 时间戳和 windowMs 最大到 10^9,相加可能超过 32 位有符号整数范围,C++/Java 中应使用 long long 或 long 保存时间戳与窗口和。
  • 解析时每 3 个字段一条请求,时间戳是第 3 个字段,不要错取方法或路径。
  • 没有请求时 parts 只有 windowMs 一个字段,应返回 0。

⏱️ 复杂度

时间复杂度:O(L),L 是输入字符串的长度。切分字符串扫描一遍;双指针中 left、right 都只往右走,每条请求最多被两个指针各经过一次。
空间复杂度:O(L),需要保存切分后的字段和全部时间戳。

💻 参考代码(Java)

class Solution {
    public int peakRequestCount(String log) {
        String[] parts = log.trim().split("\\s+");
        if (parts.length == 0 || parts[0].isEmpty()) return 0;
        long window = Long.parseLong(parts[0]);
        int m = (parts.length - 1) / 3;
        long[] times = new long[m];
        // 每三个字段是一条请求,第三个字段是时间戳
        for (int i = 0; i < m; i++) {
            times[i] = Long.parseLong(parts[1 + i * 3 + 2]);
        }
        if (window == 0 || m == 0) return 0;
        int best = 0, right = 0;
        // 时间戳非递减,双指针维护半开窗口
        for (int left = 0; left < m; left++) {
            if (right < left) right = left;
            while (right < m && times[right] < times[left] + window) right++;
            best = Math.max(best, right - left);
        }
        return best;
    }
}

💻 参考代码(C++)

class Solution {
public:
    int peakRequestCount(string log) {
        vector<string> parts;
        string cur;
        for (char c : log) {
            if (c == ' ') {
                if (!cur.empty()) { parts.push_back(cur); cur.clear(); }
            } else {
                cur += c;
            }
        }
        if (!cur.empty()) parts.push_back(cur);
        if (parts.empty()) return 0;
        long long window = stoll(parts[0]);
        vector<long long> times;
        // 每三个字段是一条请求,第三个字段是时间戳
        for (int i = 1; i + 2 < (int)parts.size(); i += 3) {
            times.push_back(stoll(parts[i + 2]));
        }
        if (window == 0 || times.empty()) return 0;
        int best = 0, right = 0, n = times.size();
        // 时间戳非递减,双指针维护半开窗口
        for (int left = 0; left < n; ++left) {
            if (right < left) right = left;
            while (right < n && times[right] < times[left] + window) ++right;
            best = max(best, right - left);
        }
        return best;
    }
};

💻 参考代码(Python)

class Solution:
    def peakRequestCount(self, log: str) -> int:
        parts = log.split()
        if not parts:
            return 0
        window = int(parts[0])
        times = []
        # 每三个字段是一条请求,第三个字段是时间戳
        i = 1
        while i + 2 < len(parts):
            times.append(int(parts[i + 2]))
            i += 3
        if window == 0 or not times:
            return 0
        best = 0
        right = 0
        n = len(times)
        # 时间戳非递减,双指针维护半开窗口 [times[left], times[left]+window)
        for left in range(n):
            if right < left:
                right = left
            while right < n and times[right] < times[left] + window:
                right += 1
            best = max(best, right - left)
        return best

💻 参考代码(JavaScript)

class Solution {
    peakRequestCount(log) {
        const parts = log.trim().split(/\s+/).filter(s => s.length > 0);
        if (parts.length === 0) return 0;
        const window = Number(parts[0]);
        const times = [];
        // 每三个字段是一条请求,第三个字段是时间戳
        for (let i = 1; i + 2 < parts.length; i += 3) {
            times.push(Number(parts[i + 2]));
        }
        if (window === 0 || times.length === 0) return 0;
        let best = 0, right = 0;
        const n = times.length;
        // 时间戳非递减,双指针维护半开窗口
        for (let left = 0; left < n; left++) {
            if (right < left) right = left;
            while (right < n && times[right] < times[left] + window) right++;
            best = Math.max(best, right - left);
        }
        return best;
    }
}
module.exports = Solution;
OpenCV C++ 图像处理实战 ——《基于轮廓比对的缺陷检测》 本文使用OpenCV C++ 实现基于轮廓比对的缺陷检测。 阅读详情

相关推荐

uniapp串口通信实战:从零搭建物联网设备控制App(附完整代码)

本文详细介绍了如何使用Uniapp实现串口通信,从零搭建物联网设备控制App。内容涵盖环境配置、串口初始化、数据收发、错误处理等核心功能,并提供了完整的代码示例,帮助开发者快速掌握跨平台串口通信技术,适用于智能农业、工业自动化等物联网场景。

weixin_30369041的博客 597

Scrum 敏捷框架完全指南

形式化的质量检查清单,只有满足 DoD 的增量才能交付。

Cat_fish_snow的博客 424

不用敲命令!用宝塔面板可视化部署pbootCMS的保姆级教程(2024最新版)

本文提供2024年最新版pbootCMS可视化部署教程,全程使用宝塔面板操作,无需任何命令行知识。从服务器初始化、LNMP环境配置到源码上传、安装向导,手把手指导用户通过图形化界面快速搭建专业网站,适合零基础新手和追求高效建站的用户。

weixin_42509507的博客 491

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 332

STM32----SPI+DMA高效读写外部Flash的配置与实战

本文详细介绍了STM32通过SPI+DMA高效读写外部Flash的配置与实战方法。针对大量数据传输场景,使用DMA技术可显著提升系统效率,释放CPU资源。文章包含完整的代码实现、常见问题调试技巧以及性能优化建议,帮助开发者快速掌握这一关键技术。

pea55的博客 1032

【Davinci开发】:CS接口创建及连接

AUTOSAR SWC之间添加CS-port :详细讲解step

2529

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 311

【即插即用模块】注意力篇 | TGRS 2025 | CDFIM:通道+空间多尺度注意力,双模态特征融合增强,性能翻倍!

C2DFF-Net提出了一种轻量级跨模态特征融合模块CDFIM,通过模态差异感知和多尺度深度滤波增强双模态互补信息。该模块采用通道-空间注意力协同机制,以极低计算成本(仅增加0.26M参数)提升多模态目标检测性能,在三个遥感数据集上平均提升mAP约1.7%。适用于无人机等边缘设备的实时检测任务,为跨模态融合提供高效解决方案。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 626

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 331

TC3XX - MCAL知识点(九):PWM EB-tresos配置说明及代码浅析

脉冲宽度调制(PWM)驱动器负责提供与AUTOSAR指定的PWM信号生成相关的标准服务。PWM通道的底层定时器驱动是GTM (TOM或ATOM片)或CCU6 (T12或T13片)定时器通道。软硬件匹配关系如下:PWM直接引用的是GTM与CCU6模块,然后GTM与CCU6再关联到Port的,根据软硬件匹配关系,也能调用中断来使用,本例子没使用中断。CCU6是一个高分辨率的16位捕获和比较单元,具有特定的应用模式,主要用于交流驱动控制。特殊的工作模式支持控制无刷直流电机使用霍尔传感器或反电动势检测。

梦想技术家 2889

CloudCompare 和 PCL:点云网格化分析与处理

点云网格化是将点云数据转化为规则网格的过程,其主要思想是将离散的点云投影到一个平面上,然后对该平面进行划分,形成一系列小区域。在点云网格化方面,PCL 提供了各种算法和工具,可以实现高效的点云网格化操作。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化算法参数,如搜索半径和最大三角形边长等,执行了网格化操作,最后将网格化结果保存到输出文件中。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化参数,如分辨率等,执行了网格化操作,最后将网格化结果保存到输出文件中。

TechPulseZ的博客 1293

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 604

【Bug已解决】zsh: command not found: claude 解决方案

方案适用场景推荐指数难度方案一:配置 npm 全局目录所有平台,长期使用⭐⭐⭐⭐⭐低方案二:修复 PATH 变量快速修复,不想改 npm 配置⭐⭐⭐⭐低方案三:重建软链接文件存在但链接断裂⭐⭐⭐中方案四:nvm 专属方案使用 nvm 管理多版本 Node.js⭐⭐⭐⭐低方案五:Windows 专属Windows 系统⭐⭐⭐⭐⭐低方案六:Homebrew 安装macOS 用户,npm 有问题⭐⭐⭐低根本原因。

博客 1万+

优选算法:分治-归并排序

交易逆序对的总数

Wangshijie1015的博客 147

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 24

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

408 算法 06|堆与 Top-K:最小的 10 个数,到底该用数组还是堆

2022(42) 找 100 万个数里最小的 10 个,官方给了"10 元素有序数组"和"大根堆"两种答案。我把两种都实现并数了比较次数:k=10 时两者几乎打平,k=10000 时堆少 111 倍。另附 2021(42) 计数排序的比较次数与稳定性实测。

m0_56226131的博客 437

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 425

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 174

算法64,字母异位词分组

代码核心思路是:互为字母异位词的字符串,在对其字符进行排序后,一定会得到相同的字符串。因此,可以将排序后的字符串作为哈希表的键(Key)来进行分组。

sheshibenniaodan的博客 195

【MPC 算法】Python 实战:模型预测控制(MPC)算法原理与代码实现

本文介绍模型预测控制(MPC)原理与Python实现。MPC通过滚动优化预测未来状态,结合系统模型、目标函数与约束条件,动态生成最优控制序列。以一阶温度系统为例,使用CVXPY构建凸优化问题,实现加热功率的智能调控。代码包含模型预测、目标函数设计(含温度跟踪与控制平滑惩罚)、输入约束及滚动更新机制。仿真结果表明,MPC能快速稳定温度至目标值60℃,且控制动作平滑合理,体现其在复杂系统中的优越性。

赖德发的博客 48

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 221

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 181

【前缀和+复合离散化】题解:双色矩形(two)_数据结构_算法优化_预处理_二维前缀和_STL_C++算法竞赛

给定一个 $n \times n$ 的黑白棋盘,初始按 $i+j$ 奇偶染色,经 $k$ 个格子颜色翻转后,求子矩形中黑白格子数差的绝对值最大值。由于 $n$ 可达 $10^9$,但 $k \leq 50$,可离散化关键点。枚举所有由修改点构成的矩形及其四边向外扩展(共 $16$ 种扩展方式),利用二维前缀和快速计算变化量,结合奇偶性判断多出的格子颜色,最终取最大绝对差。时间复杂度为 $O(k^4)$,在 $k \leq 50$ 下可行。

YLCHUP的博客 202

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 374

算法62&&63,存在重复元素

判断整数数组中是否有任意元素出现至少两次。:判断数组中是否存在两个。,且索引差值的绝对值。

sheshibenniaodan的博客 96

商业综合体公摊电费分摊算法:512 商户双层权重与尾差实测

公摊电费分摊算法是指把公共回路电量按公示权重拆到每户的规则化计算过程,核心不是权重多精巧,而是每张账单都能被租户手算复现。某珠三角商业综合体 512 户商户实测:固定费与变动费按 4:6 加权,尾差用余数递补压到 0.01 千瓦时精度,24 个月 12288 张账单重算差异为零,月度争议从 31 起降到 2 起。适用边界:商铺与租户已独立装表、公共回路已分项计量的商业综合体适用;末端未装表、靠总表减合计倒推公摊的场景不适用,先把表补齐再谈分摊。

170
上一篇: 2026华为OD机考新系统真题|寻找服务器组的最小差值下表(2026.11.08)
下一篇: 2026华为OD机考新系统真题|订单配送路径规划(2026.11.08)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值