2026华为OD机考新系统真题|汽车出行路线重复检测(2026.11.04)

Qt-无标题窗口         今天学习了下无标题窗口,于是来记录下我的学习过程首先建立一个Qt Widgets Application继承QWidget类创建完后直接运行就得到了如下效果那么,既然是无标题窗口就要去掉窗口栏啊,于是加上setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);去掉标题栏,但是这样整个窗口就不能移动... 阅读详情

汽车出行路线重复检测(2026.11.04)

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

题目描述

汽车智能导航系统需要检测用户的出行存在多少个闭环路线,以此优化导航推荐。

给定一个地点编号数组 locations,它按行驶顺序记录车辆途经的每个地点(locations[j] 是第 j 个途经地点)。

一段连续子路线 locations[i..j](0≤i<j≤n−1,两端都取到)是闭环路线,当且仅当:

  1. 起点与终点是同一个地点:locations[i] == locations[j];
  2. 除首尾外,中间地点 locations[i+1..j-1] 两两不同(含空中间段);
  3. 中间地点都不等于首尾地点:locations[i+1..j-1] 中没有值等于 locations[i]。

请返回数组中满足上述条件的连续子路线的条数。

注意下面几个由样例确定的计数口径:

  • 长度只有 2 的子路线 [x, x] 也算闭环(中间段为空,两条附加条件自动满足),见样例 3、样例 5;
  • 计数按下标区间统计,同一个地点值在不同位置形成的闭环要分别计数:例如 [1,1,1] 答案是 2 而不是 1([1,1] 取前两个 1、[1,1] 取后两个 1),见样例 3;
  • 中间只要出现重复地点、或出现与首尾相同的地点,该子路线就不是闭环:例如 [1,2,2,1] 中整段 [1,2,2,1] 不合法(中间 2 重复,且中间含 1),只有 [2,2] 合法,答案是 1,见样例 5。

输入描述

输入一行,形如 [1,2,1,3,4],用方括号包住整个地点编号数组,元素之间用半角逗号分隔,逗号后可能带空格;数组为空时为 []。

数据范围

  1. 0≤locations.length≤106(数组可以为空);
  2. 地点编号为非负整数,0≤locations[i]≤109。

输出描述

输出一行一个十进制整数,表示闭环路线的条数;没有时输出 0。

样例

用例输入 1

[1,2,1,3,4]

用例输出 1

1

用例解释 1

只有一个闭环 [1,2,1]:首尾都是地点 1,中间只有地点 2(不重复、也不等于 1)。其余子路线首尾都不相同,或中间不满足条件。

用例输入 2

[2,5,3,2,4,6,4]

用例输出 2

2

用例解释 2

  • 闭环 1:[2,5,3,2](下标 0…3,首尾都是 2,中间 5、3 互不相同且都不等于 2);
  • 闭环 2:[4,6,4](下标 4…6,首尾都是 4,中间只有 6)。

用例输入 3

[1,1,1]

用例输出 3

2

用例解释 3

闭环 1:[1,1](前两个 1),闭环 2:[1,1](后两个 1)。整段 [1,1,1] 不合法,因为中间的那个 1 与首尾地点相同。

来源

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




🧠 解题思路

第一步:题目在问什么

统计有多少段连续子路线 locations[i…j](i < j)满足:首尾地点相同;中间的地点两两不同;中间的地点也都不等于首尾。中间可以为空,例如 [x, x] 也算一条。

第二步:最直接的做法为什么慢

枚举所有 (i, j) 再检查中间部分,子路线有约 n²/2 段,数组长度最大 10⁶,是 5×10¹¹ 段,根本数不完。

第三步:固定终点 j,起点只有一个候选

按终点 j 来数。设 v = locations[j],起点 i 必须也满足 locations[i] = v。

如果 v 在 j 前面出现过好几次,只有最近的那一次 p 可能当起点:如果选更早的一次当起点,最近的那个 p 就落在了中间,而中间的地点不能等于首尾,不合法。

所以以 j 结尾的闭环最多只有一条,就是 [p, j]。还要检查它的中间 locations[p+1…j−1] 两两不同。中间不可能有 v(p 已经是 j 之前最后一次出现),这一条自动满足。

第四步:用滑动窗口判断“中间两两不同”

维护一个窗口 [left, j−1],保证窗口里的地点两两不同,并且 left 尽量靠左。这就是“最长无重复子串”的滑动窗口:用 last_pos 记录每个地点上一次出现的位置,读到 locations[j] 时,如果它上次出现的位置 p 在窗口里(p ≥ left),就出现了重复,left 跳到 p + 1。

这个窗口刚好能回答第三步的问题:

  • p ≥ left:中间部分 [p+1, j−1] 在窗口里面,两两不同,[p, j] 是一条闭环,答案加 1。然后窗口里有了两个 v,left 跳到 p + 1;
  • p < left:left 之所以已经越过 p,是因为 p 和 j 之间出现过一对重复的地点,[p, j] 的中间不合法,不计数;
  • v 第一次出现:没有起点,不计数。

最后都要把 last_pos[v] 更新为 j。

用样例走一遍

样例 2:locations = [2, 5, 3, 2, 4, 6, 4]

j地点上次出现 pleft处理答案
02无0第一次出现0
15无0第一次出现0
23无0第一次出现0
3200p ≥ left,[0, 3] 是闭环;left 改为 11
44无1第一次出现1
56无1第一次出现1
6441p ≥ left,[4, 6] 是闭环;left 改为 52

答案是 2:路线 2→5→3→2 和 4→6→4。

看一个不计数的例子:[1, 2, 2, 1]。j = 2 时 2 和下标 1 构成闭环 [1, 2],left 跳到 2;j = 3 时 1 的上次出现 p = 0 < left = 2,中间是 2, 2,有重复,不计数。答案是 1。

样例 3:[1, 1, 1]。j = 1 时 [0, 1] 计数,left = 1;j = 2 时 p = 1 ≥ left,[1, 2] 计数。[0, 2] 不算,因为中间的 1 等于首尾。答案是 2。

⚠️ 易错点

  • 长度为 2 的 [x, x] 也是闭环(中间为空),不能漏。
  • 同一个地点出现多次时,只和上一次出现配对,更早的不行。
  • 判断用 p ≥ left:p 在窗口左边时,p 和 j 之间已经有重复的地点,不能计数。
  • 地点编号最大 10⁹,last_pos 要用哈希表,不能按编号开数组。
  • 数组为空时返回 0。

⏱️ 复杂度

时间复杂度:O(n),每个位置只处理一次,哈希表查找、更新都是 O(1);n 不超过 10⁶。
空间复杂度:O(n),哈希表最多存 n 个不同的地点。

💻 参考代码(Java)

import java.util.*;

class Solution {
    public long countLoops(int[] locations) {
        int n = locations.length;
        // lastPos 记录每个值上一次出现的位置
        Map<Integer, Integer> lastPos = new HashMap<>();
        // left 维护无重复元素窗口的左边界
        int left = 0;
        long ans = 0;
        for (int j = 0; j < n; ++j) {
            int v = locations[j];
            Integer pObj = lastPos.get(v);
            int p = (pObj == null) ? -1 : pObj;
            // 若上一次出现位置在窗口内,则 [p, j] 是唯一以 j 结尾的合法闭环
            if (p >= left) {
                ++ans;
                // 窗口内出现重复,收缩左边界
                left = p + 1;
            }
            lastPos.put(v, j);
        }
        return ans;
    }
}

💻 参考代码(C++)

class Solution {
public:
    long long countLoops(vector<int>& locations) {
        int n = locations.size();
        // last_pos 记录每个值上一次出现的位置
        unordered_map<int, int> last_pos;
        // left 维护无重复元素窗口的左边界
        int left = 0;
        long long ans = 0;
        for (int j = 0; j < n; ++j) {
            int v = locations[j];
            auto it = last_pos.find(v);
            int p = (it == last_pos.end()) ? -1 : it->second;
            // 若上一次出现位置在窗口内,则 [p, j] 是唯一以 j 结尾的合法闭环
            if (p >= left) {
                ++ans;
                // 窗口内出现重复,收缩左边界
                left = p + 1;
            }
            last_pos[v] = j;
        }
        return ans;
    }
};

💻 参考代码(Python)

class Solution:
    def countLoops(self, locations):
        n = len(locations)
        # last_pos 记录每个值上一次出现的位置
        last_pos = {}
        # left 维护无重复元素窗口的左边界
        left = 0
        ans = 0
        for j in range(n):
            v = locations[j]
            p = last_pos.get(v, -1)
            # 若上一次出现位置在窗口内,则 [p, j] 是唯一以 j 结尾的合法闭环
            if p >= left:
                ans += 1
                # 窗口内出现重复,收缩左边界
                left = p + 1
            last_pos[v] = j
        return ans

💻 参考代码(JavaScript)

class Solution {
    countLoops(locations) {
        const n = locations.length;
        // lastPos 记录每个值上一次出现的位置
        const lastPos = new Map();
        // left 维护无重复元素窗口的左边界
        let left = 0;
        let ans = 0;
        for (let j = 0; j < n; ++j) {
            const v = locations[j];
            const p = lastPos.has(v) ? lastPos.get(v) : -1;
            // 若上一次出现位置在窗口内,则 [p, j] 是唯一以 j 结尾的合法闭环
            if (p >= left) {
                ++ans;
                // 窗口内出现重复,收缩左边界
                left = p + 1;
            }
            lastPos.set(v, j);
        }
        return ans;
    }
}

module.exports = Solution;
C# 移动无标题栏无边框窗体的3种方法 目录 第一种:手工移动 第二种:调用系统API 1.引入下面代码 前提需要引入命名空间using System.Runtime.InteropServices 2.增加鼠标按下事件发送消息,让系统误以为按下是标题栏 第三种,重写 WndProc 第一种:手工移动 直接通过修改窗体位置从而达到移动窗体的效果 //定义一个位置信息Point用于存储鼠标位置 private Point mPoint; /// <summary> 阅读详情

相关推荐

ST-CNN实战:用Python实现交通流量预测(附完整代码)

本文详细介绍了如何利用时空卷积神经网络(ST-CNN)进行交通流量预测的实战过程。通过Python和PyTorch,从数据预处理、构建邻接矩阵,到ST-CNN核心模块的代码实现与模型训练,提供了完整的解决方案,帮助开发者掌握处理时空序列数据的核心算法。

rust6ferris的博客 928

Delphi无标题窗体增强功能实现:让无标题窗体更具交互性

Delphi无标题窗体增强功能实现:让无标题窗体更具交互性 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在软件开发领域,Delphi 语言因其高效的执行速度和清晰的语法结构,一直受到开发者的喜爱。然而,在使用无标题窗体(borderstyle=bsnone)时,开发者常常面临一个问题:用户无法通过常规方式来移动或调整窗体大小。本项目正是为了解决这一难题而诞生,它提供...

gitblog_06708的博客 1028

Wincc7.5SP1 按钮操作记录(二次确认及语音播报)

Wincc 7.5 SP1 按钮操作记录生成(含二次确认及语音播报) 前面一篇文章已经介绍了“语音播报WINCC报警”,本文是之前功能的延伸,记录按钮操作记录并实现播报。 操作记录及语音播报效果 <创建消息文本> 1. 创建消息文本 消息编号100,消息等级“系统无确认”,消息类型“操作员输入消息”,消息文本“循环水泵启动操作”,其他参数默认。 消息编号101,消息等级“系

徐站的春天 1万+

无标题栏窗口拖动的实现

普通的Windows应用程序窗口都具有统一的窗口风格,它们一般都包括:用户区和非用户区两部分。非用户区包括标题条、窗口边框、最大化按钮、最小化按钮、关闭按钮和系统默认的快捷键及鼠标支持等。利用鼠标的左键通过拖动窗口的标题条可以在屏幕上任意移动整个窗口,当光标停止在窗口边框上时可以改变窗口的大小。在一些比较经典的软件中,有一类特殊的无标题条的窗口。这种窗口不需要改变窗口的大小,但必须具有窗口客户区域

ArduousBonze的专栏 4062

数据库崩溃恢复机制:REDO日志与UNDO日志详解

在数据库管理系统中,事务的持久性和一致性是至关重要的。为了保证在系统崩溃或发生故障时数据不会丢失,数据库引入了恢复机制。其中,REDO日志和UNDO日志是两种关键的恢复技术。本文将详细描述这两种日志的作用、工作原理以及它们在数据库崩溃恢复中的应用。

My_wife_QBL的博客 1413

Modelsim10.5_se安装(Win11)

modelsim是Mentor公司开发的优秀的HDL语言仿真软件。它能提供友好的仿真环境,采用单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术,编译仿真速度快且编译的代码与平台无关。

m0_51186267的博客 9924

无标题窗口的拖动

普通的Windows应用程序窗口都具有统一的窗口风格,它们一般都包括:用户区和非用户区两部分。非用户区包括标题条、窗口边框、最大化按钮、最小化按钮、关闭按钮和系统默认的快捷键及鼠标支持等。利用鼠标的左键通过拖动窗口的标题条可以在屏幕上任意移动整个窗口,当光标停止在窗口边框上时可以改变窗口的大小。在一些比较经典的软件中,有一类特殊的无标题条的窗口。这种窗口不需要改变窗口的大小,但必须具有窗口客户区域

lianxiao1314的专栏 1001

rk3399 linux 5.10 usb 2.0设备上电概率性注册失败

先排除硬件上的问题,然后就烧录kernel 4.1的的镜像,多次测试也没有发现这个问题,所以排除了硬件上的问题,然后。查下usb hub和usb 4G的复位脚,写驱动都给它们配上了,但是还是存在这个问题。最后通过对比rk3399.dtsi发现少了个power-domains = ;多次开关机,发现usb hub和4G都通信失败了,这就有点奇怪了,按理说usb驱动是没啥问题的。加上后,重新编译烧录,重新测试没有发现这个问题了!先查看usb log。

qq_32017483的博客 2675

C#拖动无标题栏窗体

很长时间没有写博客了,今天又解决并测试通过了一个Delphi很简单的问题——无标题栏窗体的拖动 。其实是个很简单的问题,但是还是想写下来,一方面加深自己的记忆,一方面与朋友们分享!DeviceAnywhere在Ioicn发布了,反响似乎一般,我想是因为.net FrameWork环境的问题吧,希望Microsoft再出sp的时候把.net FrameWorkx.x集成到操作系统里吧,这样大家都方便

Windows Mobile 开发历险 1961

告别JSON!Anthropic发布Tool Calling 2.0,Agent上下文消耗骤降80%

Anthropic发布ToolCalling 2.0更新,彻底革新AI Agent开发模式。四大核心特性:1)程序化工具调用,允许模型直接输出可执行代码替代JSON交互,降低30-50%Token消耗;2)动态网页过滤,自动清洗网页内容减少24%无效信息;3)工具搜索机制,按需加载工具定义,最高优化80%上下文窗口;4)工具使用示例,通过Few-Shot示范提升复杂表单处理准确率至90%。这一升级将Agent范式从"大模型作为路由"推进到"大模型作为引擎",但需注意代

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 797

Mamba SSM 实战:IMDb 文本分类 + Mamba-ssm 全流程

Mamba SSM 文本分类链路:IMDb 二分类 → MambaLMHeadModel (d_model=256, n_layer=8, d_state=16, exp2=2) → 末 token 分类头。5 epoch 达 89.2% 准确率 (与 BERT-base 持平), 但显存降低 44% (3.5GB vs 6.2GB)。建议序列长度 ≥ 1024 再选 Mamba, 短序列 (< 512) 用 BERT 更高效。扩展时注意d_state。

m0_71589036的博客 57

android设置activity全屏 | 无标题

1.设置activity无标题 方法一: 在Manifest.xml中为activity增加属性:  android:theme="@android:style/Theme.NoTitleBar" 方法二: 在activity的onCreate()中加入:requestWindowFeature(Window.FEATURE_NO_TITLE); 2.设置activity全屏

CNnumen 1万+

STM32实战开发(76):STM32开发无线传感器网络(WSN)完整实现

本文介绍了如何基于STM32开发无线传感器网络,包括硬件选择、通信协议、系统设计和编程实现。通过STM32的强大性能和低功耗特性,我们能够构建高效、可靠的无线传感器网络。无论是Zigbee、LoRa、Wi-Fi还是BLE协议,STM32都能够与多种通信模块进行兼容,满足不同应用的需求。希望这篇文章能帮助您了解无线传感器网络的构建流程,并为您的项目提供有价值的参考。

2201_76125393的博客 1059

Android应用设置无标题栏的实现方式

去掉标题栏   第一,在代码中实现; requestWindowFeature(Window.FEATURE_NO_TITLE); 代码要写在setContentView()前。 第二,在xml文件中进行配置; 调用系统自带的样式; 实现全屏效果: android:theme="@android:style/Theme.NoTitleBar.Fullscree

三颗猴面包树 1500

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C#中的无标题栏窗体

所以谓的无标题栏窗体,与标题无关,看边框设置将窗体的FormBorderStyle属性设置为None就可以了,其它的一些属性只是一些显示样式.关于无标题栏窗体的拖动就用傻办法,至少我看到的都是这样的.关于这一方面的介绍不少,我就不在这里缀述了,如果有想要示例的,可以留下邮箱.

fqlove的专栏 1444

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

delphi技巧——移动无标题窗口

 delphi技巧——移动无标题窗口关键词:移动,消息,无标题                      作者:朱能文   我们都知道windows是通过标题栏来移动窗体的,当我们在标题栏上按下鼠标左键时,windows将发送wM_NCHitTest消息,来告诉系统要移动窗体。但我们在实际编程时,有时为了界面的需要或特殊的要求,窗体没有标题栏,我们必须通过程序来移动窗体。下面我将介

nwen的专栏 1282

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Delphi 无标题窗体增强功能实现

Delphi 无标题窗体增强功能实现 去发现同类优质开源项目:https://gitcode.com/ 资源简介 本资源提供了一种在 Delphi 开发环境中对无标题窗体(borderstyle=bsnone)进行增强的方法。默认情况下,无标题窗体不显示边框,用户无法通过常规方式移动或调整窗体大小。本资源通过特定的技术手段,为无标题窗体添加了边框,同时实现了窗体的拖拽调整大小和移动位置的功能。 功...

gitblog_06743的博客 433

android 设置为无标题,android无标题全屏的三种设置方式

注意,在设置前把XXX-Activity extends ActionBarActivity 修改成XXX-Activity extends Activity,否则activity无法启动1.在onCreat方法中setContentView()之前插入//设置无标题requestWindowFeature(Window.FEATURE_NO_TITLE);//设置全屏getWindow().s...

weixin_35398679的博客 826

移动无标题栏的窗口-java

import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener;

Ymy2011的专栏 591

【无标题】

今天在练习自定义标题栏(Android初级开发(四)——补充3)的过程中遇到了隐藏系统自带标题栏的问题,现将几种去掉系统自带标题栏的方式做一总结。大体上可以分为两种方式,一种是修改xml文件(这种方式产生的效果作用于所有Activity),一种是编码实现(这种方式产生的效果只作用于当前Activity): 方法1-1: 1、查看清单文件AndroidManifest.xml中的theme android:theme="@style/AppTheme"(系统默认的)保...

xujingcheng123的博客 165

android ActionBarActivity设置全屏无标题

新建的Activity继承自ActionBarActivity,设置全屏无标题本来很简单的事,但是没想到app竟然无缘无故的挂,要么就是白屏一片,要么就是黑屏。坑了我一个多小时!!! 原因是ActionBarActivity设置theme的时候只能使用v7包里的Theme.AppCompat***开头的主题,因此设置全屏无标题的话需要自定义个style: name="ActionBar

奥特曼超人的博客专栏 2275

android手机设置无标题后,程序挂掉 解决 (如何用最简短语句设置 手机 全屏无标题)

手机设置无标题后,总是挂掉,最初以为是布局的问题,换了还是不中,然后新建一个工程,发现还是不中!怎么回事?我以前是搞过着的啊,原来设置全屏无标题,这些语句一定要设在setContentView前面!谨记啊! 还是对这些知识不熟悉,所以我写到这,复习下! 设置无标题+全屏: requestWindowFeature(Window.FEATURE_NO_TITLE); int flag = Wi

yanzi1225627的专栏 3033

Android设置无标题窗口

在android中,有的时候要做一个无标题的窗口,包括没状态栏的,有两种方法实现:  1 在XML配置文件中:             package="de.vogella.android.temperature"        android:versionCode="1"        android:versionName="1.0">

Bottle's Blog 6万+

界面_无标题窗口的移动

使用OnNcHitTest消息实现无标题窗口的移动////////////////////////////////////////////////////////////UINT myWnd::OnNcHitTest(CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 // rect 指定,鼠标点在什么地方时,可以移动窗口 // 其实就是把这部分区域当成是 标

2059

Android应用界面无标题栏和全屏效果的两种实现方式

我们在开发Android应用的时候,很多情况下为了提高屏幕显示的内容,需要设置无标题或者是全屏模式。但是如何进行这样的设置呢?主要有以下两种方式:(1)AndroidManifest.xml配置文件进行配置;(2)在Activity类中写程序语句进行设置。

Fantasy Dancer 2489
上一篇: 2026华为OD机考新系统真题|订单配送路径规划(2026.11.08)
下一篇: 2026华为OD机考新系统真题|河流水系流量评估(2026.11.04)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值