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

笔试强训 Day 36:提取不重复的整数、哈夫曼编码、abb

Day 36

提取不重复的整数

解题思路:模拟

代码实现:

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);int[]hash=newint[10];char[]c=in.next().toCharArray();intn=c.length;StringBuildersb=newStringBuilder();for(inti=n-1;i>=0;i--){if(hash[c[i]-'0']>=1)continue;hash[c[i]-'0']++;sb.append(c[i]);}System.out.println(sb.toString());}}

哈夫曼编码

解题思路:

使用哈夫曼编码时,出现次数少的字符应放在树的更深处。每次选择当前出现次数最少的两个节点合并,它们的所有字符编码长度都会增加1,因此本次对总长度的贡献为两者出现次数之和。

用小根堆维护所有节点权重:

  1. 将所有字符出现次数放入小根堆。
  2. 每次取出最小的两个数xy
  3. 合并为新节点x + y,将其加入答案。
  4. x + y放回堆中。
  5. 重复直到堆中只剩一个节点。

最终累加值就是最短ß编码长度。

代码实现:

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);intn=in.nextInt();// 小根堆:每次 poll() 取出最小值PriorityQueue<Long>pq=newPriorityQueue<>();for(inti=0;i<n;i++){pq.offer(in.nextLong());}longans=0;// 不断合并当前最小的两个节点// 只有一种字符时,不需要区分它和其他字符,可以用长度为 0 的空编码,因此编码总长度为 0。while(pq.size()>1){longx=pq.poll();// 最小longy=pq.poll();// 次小longsum=x+y;ans+=sum;// 新的父节点放回去,继续参与下一轮合并pq.offer(sum);}System.out.println(ans);}}

abb

解题思路:

代码实现:

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);intn=in.nextInt();char[]s=in.next().toCharArray();// 记录前面的每种字符的个数long[]cnt=newlong[26];// 记录前面出现的不同二元组的个数, 每个元素表示以其为末尾, 二元组的数量long[]pair=newlong[26];// 记录前面出现的字符个数longtotal=0;// 记录 abb 出现个数longret=0;for(inti=0;i<n;i++){intc=s[i]-'a';// 以 c 为末尾的 xcc 数量ret+=pair[c];// 更新二元组, 表示以当前字符为末尾的二元组数量// err: 累加, 以当前 c 为结尾, 前面与 c 不同, 新组成的二元组数量pair[c]+=total-cnt[c];total++;cnt[c]++;}System.out.println(ret);}}
http://www.jsqmd.com/news/1349028/

相关文章:

  • leetcode-01-[704]二分查找[27]移除元素
  • 不平衡学习神器SMOTE-variants:10个实用技巧提升分类模型性能
  • 金华市婺城区GEO城市合伙人选型推荐哪家靠谱:源头厂商、合伙人权益与分润模式一次看清 - 科技快讯
  • 探索SerenityOS:从复古美学到现代操作系统的完整实践指南
  • 石家庄本地电工上门报价明细,维修避坑指南完整版 - 精彩城市
  • AutowareArchitectureProposal完全指南:自动驾驶软件架构探索与实践
  • 通达信缠论插件ChanlunX:3步实现缠论分析自动化,告别手动画线烦恼
  • 如何用Sultan快速上手命令行编程?5分钟入门教程
  • WinDiskWriter:让Mac用户告别Windows启动盘制作难题的终极指南
  • OrcaSlicer性能调优实战:从150mm/s到300mm/s的速度突破指南
  • Investbrain多币种支持详解:轻松管理全球投资组合
  • JS基础以及与Java区别学习笔记
  • 深入理解hd-idle日志:如何通过日志优化硬盘休眠策略
  • 宣城装修公司业主评价比较好?真实业主反馈拆解 - GrowthUME
  • Table Transformer实战指南:基于DETR的文档表格提取深度解析
  • G-Helper终极指南:华硕笔记本性能控制的轻量化革命
  • ADR微服务安全:保护分布式AI代理架构的终极指南
  • 告别复杂配置!kubeadm-ha使用Ansible实现Kubernetes自动化安装的完整教程
  • 揭秘自动驾驶制动系统:automated-driving-control校准方案
  • 如何用AI图像扩展工具从单张照片构建完整游戏美术资源
  • Image Extender:5大智能创作模式,一键扩展图像与生成2D游戏美术资源
  • 终极指南:aspire-biencoder-biomed-spec如何彻底改变生物医学文献相似度计算
  • 2026年南充广告设计制作安装|华蔓广告|警示标识,围挡,展架等标识制作一站式服务厂家 - 四川华蔓广告有限公司
  • 从入门到精通:keyring-rs示例程序带你玩转跨平台密钥管理
  • Java3 - 运算符
  • 开启宝塔Nginx防火墙支付返回失败解决方法
  • ViMax:智能体协同的视频创作革命
  • 为什么选择QRibbon?Qt Ribbon菜单栏实现方案对比与选型指南
  • 3步彻底告别Microsoft Edge:EdgeRemover让你完全掌控Windows浏览器
  • 2026年收纳五金品牌哪家** 揭阳市尊越精密制造 - 奔跑123