当前位置: 首页 > news >正文

2026-06-14:切换打开灯泡。用go语言,给定一个整数数组 bulbs,数组中每个元素都在 1 到 100 之间。共有 100 个电灯泡,编号从 1 到 100,初始时全部处于关闭状态。 依次遍

2026-06-14:切换打开灯泡。用go语言,给定一个整数数组 bulbs,数组中每个元素都在 1 到 100 之间。共有 100 个电灯泡,编号从 1 到 100,初始时全部处于关闭状态。

依次遍历数组 bulbs 的每个值 bulbs[i],对编号为 bulbs[i] 的灯泡执行切换操作:

  • 若该灯泡原本关闭,则将其打开;

  • 若该灯泡原本打开,则将其关闭。

遍历完成后,收集所有最终处于打开状态的灯泡编号,并按升序排列输出;如果最终没有任何灯泡打开,则返回空列表。

1 <= bulbs.length <= 100。

1 <= bulbs[i] <= 100。

输入: bulbs = [10,30,20,10]。

输出: [20,30]。

解释:

第 bulbs[0] = 10 个灯泡当前是关闭状态,将其打开。

第 bulbs[1] = 30 个灯泡当前是关闭状态,将其打开。

第 bulbs[2] = 20 个灯泡当前是关闭状态,将其打开。

第 bulbs[3] = 10 个灯泡当前是打开状态,将其关闭。

最终,第 20 个和第 30 个灯泡处于打开状态。

题目来自力扣3842。

一、整体执行分步详细过程

阶段1:遍历灯泡操作数组,用哈希map记录每个灯泡切换次数的奇偶性

核心逻辑:灯泡初始全关,切换偶数次=最终关闭,切换奇数次=最终打开;使用异或^=1快速标记奇偶,1代表切换奇数次(亮),0代表偶数次(灭)。

  1. 初始化空字典cnt,用于存储灯泡编号与切换奇偶标记;
  2. 读取数组第一个元素10
    • 字典中无键10,cnt[10] = 0 ^ 1 = 1
    • 含义:10号灯泡切换1次,奇数,暂时亮起。
      当前字典:{10:1}
  3. 读取数组第二个元素30
    • 字典中无键30,cnt[30] = 0 ^ 1 = 1
    • 含义:30号灯泡切换1次,奇数,暂时亮起。
      当前字典:{10:1, 30:1}
  4. 读取数组第三个元素20
    • 字典中无键20,cnt[20] = 0 ^ 1 = 1
    • 含义:20号灯泡切换1次,奇数,暂时亮起。
      当前字典:{10:1, 30:1, 20:1}
  5. 读取数组第四个元素10
    • 字典已有键10,对应值为1,cnt[10] = 1 ^ 1 = 0
    • 含义:10号灯泡累计切换2次,偶数,最终熄灭。
      遍历全部数组后最终字典:{10:0, 30:1, 20:1}

阶段2:筛选所有最终亮起的灯泡

遍历哈希字典里每一组(灯泡编号,标记值):

  1. 键10,值0:标记不大于0,代表切换偶数次,灯泡关闭,舍弃;
  2. 键30,值1:标记大于0,切换奇数次,灯泡打开,将30存入结果切片ans;
  3. 键20,值1:标记大于0,切换奇数次,灯泡打开,将20存入结果切片ans;
    筛选完成后,未排序的ans切片内容:[30,20]

阶段3:对结果升序排序

调用排序函数对ans切片从小到大重排:
原切片[30,20]排序后变为[20,30]

阶段4:返回并打印结果

函数将排序完成的切片返回,主函数输出最终结果[20,30]

二、时间复杂度分析

设输入数组长度为n(题目约束 1 ≤ n ≤ 100),去重后不同灯泡数量最多为100(灯泡编号1~100)。

  1. 第一次遍历输入数组:遍历n个元素,单次map读写O(1),总耗时 O(n);
  2. 遍历哈希字典筛选亮灯:最多遍历100个键,固定常数 O(1);
  3. 排序结果切片:最多100个元素,常数规模排序 O(1);
    整体时间复杂度:O(n)
    常数操作不影响量级,核心耗时仅为遍历输入数组。

三、额外空间复杂度分析

额外开辟的存储空间:

  1. map字典cnt:最多存储100组键值对(灯泡编号上限100),固定常量空间;
  2. 结果切片ans:最多存放100个亮灯编号,固定常量空间;
    所有额外空间不受输入数组长度n线性增长,存在固定上限。
    整体额外空间复杂度:O(1)

Go完整代码如下:

packagemainimport("fmt""slices")functoggleLightBulbs(bulbs[]int)(ans[]int){cnt:=map[int]int{}for_,i:=rangebulbs{cnt[i]^=1}fori,c:=rangecnt{ifc>0{ans=append(ans,i)}}slices.Sort(ans)return}funcmain(){bulbs:=[]int{10,30,20,10}result:=toggleLightBulbs(bulbs)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-fromcollectionsimportdefaultdictdeftoggle_light_bulbs(bulbs):cnt=defaultdict(int)foriinbulbs:cnt[i]^=1# 使用异或运算切换0/1状态ans=[ifori,cincnt.items()ifc>0]ans.sort()returnansdefmain():bulbs=[10,30,20,10]result=toggle_light_bulbs(bulbs)print(result)if__name__=="__main__":main()

C++完整代码如下:

#include<iostream>#include<vector>#include<map>#include<algorithm>std::vector<int>toggleLightBulbs(conststd::vector<int>&bulbs){std::map<int,int>cnt;for(inti:bulbs){cnt[i]^=1;// 使用异或运算切换0/1状态}std::vector<int>ans;for(constauto&pair:cnt){if(pair.second>0){ans.push_back(pair.first);}}// map已经按键排序,但为了与Go代码行为一致(Go中map无序需要排序),这里再次排序确保// 实际上从map遍历已经是有序的,这行可以省略,但保留以明确意图std::sort(ans.begin(),ans.end());returnans;}intmain(){std::vector<int>bulbs={10,30,20,10};std::vector<int>result=toggleLightBulbs(bulbs);for(size_t i=0;i<result.size();++i){std::cout<<result[i];if(i<result.size()-1){std::cout<<" ";}}std::cout<<std::endl;return0;}

http://www.rkmt.cn/news/1521338.html

相关文章:

  • 告别虚拟机!用DOSBox在Win11上搭建汇编开发环境(附Masm文件配置)
  • 实战指南:如何构建企业级开源即时通讯系统OpenIM
  • 法考讲义网盘|讲义|资料已整理
  • STM32CubeIDE实战:手把手教你将正点原子LCD驱动移植到F103精英板(附完整代码)
  • ArcGIS Pro弹出窗口图片显示:三种方法保姆级对比,别再只会用HTML了
  • YOLOv5到v8怎么选?我用同一份快递数据集做了个全面对比测试(附mAP/F1-Score详细数据)
  • 无人机虚拟仿真备赛:从SF600航线规划到安全飞行的全流程细节复盘
  • ollama v0.30.8 最新更新解读:修复启动提供方选择错误,提示词缓存更稳,MLX 推理与递归模型全面增强
  • 2026年西南钢模板租赁市场现状与供应商能力评测:谁更值得合作? - 优质品牌商家
  • 多模态仇恨内容检测:xDORA框架与FAISS检索实践
  • 九江报名 CPPM 注册采购经理哪家靠谱?机构选择避坑指南 - 众智商学院课程中心
  • 2026年知名的警示柱反光膜/工程级反光膜深度厂家推荐 - 品牌宣传支持者
  • 你的显卡在吃灰吗?解锁Ansys Speos隐藏性能:GPU计算与实时预览全攻略
  • 量子计算中的Dynamical Lie Algebra与图结构分析
  • 别再只用kl-f8了!Diffusion VAE选型指南:从kl-f4到ft-MSE,哪个更适合你的SD模型?
  • 保姆级教程:用C语言和gSOAP从零实现一个ONVIF客户端(附完整源码)
  • LangChain 系列:Structured Output结构化输出与源码解析
  • 2026年热门的秦皇岛全屋整装装修/秦皇岛一站式整装装修/秦皇岛装修/秦皇岛全屋定制装修优选服务公司 - 品牌宣传支持者
  • 2026年高端婚介服务深度观察:成都、长沙主流机构多维对比分析 - 优质品牌商家
  • Windows/Mac双平台实测:Upscayl这6个AI放大模型到底怎么选?附批量处理与压缩设置技巧
  • 保姆级教程:用mavcmd命令行一键搞定PX4无人机指点飞行(附IMU频率设置)
  • 别再傻傻分不清!嵌入式开发选RTOS,SMP和AMP到底哪个更适合你的多核SOC?
  • 从Airflow到Kafka:拆解OpenMetadata与DataHub的元数据‘搬运’哲学
  • 装机小白必看:DDR4内存条怎么选?从频率、时序到颗粒,一篇讲透避坑要点
  • 2026年知名的机架钣金加工/自动化框架钣金加工/苏州铝型材框架钣金加工/钢平台钣金加工厂家选择推荐 - 行业平台推荐
  • ProCAST结果数据搬运工:温度场、应力场导出为PATRAN格式的完整避坑指南
  • 2026年高端熔体静电纺丝设备/对喷静电纺丝设备/山东纳米静电纺丝设备/山东纳米纤维静电纺丝设备优质厂家推荐榜 - 品牌宣传支持者
  • yt-dlp-gui:终极免费视频下载神器,三步搞定YouTube视频下载
  • STC32G12K128开发板到手后,第一件事:用Keil C251和STC-ISP搞定环境与下载
  • 2026年南充桶装水配送评测:厂家地址及服务实力对比 - 优质品牌商家