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

笔试强训 Day 35:奇数位丢弃、求和、计算字符串的编辑距离

Day 35

奇数位丢弃

解题思路:模拟

可以先追踪“原序列中的位置”,规律会很明显。位置从1开始,而位置i对应的数字是i - 1

n = 5为例,序列长度为n + 1 = 6

原位置:1 2 3 4 5 6 数字: 0 1 2 3 4 5 第 1 轮保留偶数位置: 原位置:2 4 6 数字: 1 3 5 第 2 轮保留当前序列的偶数位置: 原位置:4 数字: 3

每轮结束后,保留下来的原位置分别是:

第 1 轮:2 的倍数 第 2 轮:4 的倍数 第 3 轮:8 的倍数 …… 第 k 轮:2^k 的倍数

因此最终保留的原位置,就是不超过序列长度n + 1的最大2的幂:

最终位置 = 2^⌊log₂(n+1)⌋ 最终数字 = 最终位置 - 1

例如:

n = 5 n + 1 = 6 不超过 6 的最大 2 的幂是 4 答案 = 4 - 1 = 3

n = 500时,n + 1 = 501,不超过501的最大 2 的幂是256,所以答案是255

// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15// 1 3 5 7 9 11 13 15// 3 7 11 15// 7 15// 15

代码实现:

// 0..n// 丢弃第奇数位个的数importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);while(in.hasNextInt()){intn=in.nextInt();intpower=1;while(power*2<=n+1){power*=2;}System.out.println(power-1);}}}// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15// 1 3 5 7 9 11 13 15// 3 7 11 15// 7 15// 15

求和

解题思路:

代码实现:

importjava.util.*;publicclassMain{privatestaticintn,target;privatestaticList<Integer>path;privatestaticvoiddfs(intsum,intstart){if(sum==target){for(intnum:path){System.out.print(num+" ");}System.out.println();return;}for(inti=start;i<=n;i++){if(sum+i>target)break;path.add(i);// 选择了 i 后,为了避免重复并保持递增,下一层应该从 i + 1 开始dfs(sum+i,i+1);path.remove(path.size()-1);}}publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);n=in.nextInt();target=in.nextInt();path=newArrayList<>();dfs(0,1);}}

计算字符串的编辑距离

解题思路:

dp[i][j]表示:将s的前i个字符变成t的前j个字符的最少操作数。

计算dp[i][j]时,考虑最后一步操作:

所以字符不同时:

dp[i][j] = Math.min( Math.min(dp[i][j - 1], dp[i - 1][j]), dp[i - 1][j - 1] ) + 1;

字符相同时:

dp[i][j] = dp[i - 1][j - 1];

核心套路就是:

当前状态 = 更小的前驱状态 + 最后一次操作

边界:

dp[i][0] = i; dp[0][j] = j;

代码实现:

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);char[]c1=in.next().toCharArray();char[]c2=in.next().toCharArray();intm=c1.length,n=c2.length;int[][]dp=newint[m+1][n+1];// 重要: 初始化for(inti=0;i<=m;i++)dp[i][0]=i;for(intj=0;j<=n;j++)dp[0][j]=j;for(inti=1;i<=m;i++){for(intj=1;j<=n;j++){if(c1[i-1]==c2[j-1]){dp[i][j]=dp[i-1][j-1];}else{// 重要: 不同的操作可以抽象成 dp 之间的转换, 找到操作次数最少的情况dp[i][j]=Math.min(Math.min(dp[i][j-1],dp[i-1][j]),dp[i-1][j-1])+1;}}}System.out.println(dp[m][n]);}}
http://www.jsqmd.com/news/1342396/

相关文章:

  • PCA降维技术原理与Python实战指南
  • Debian系统控制结构实战技巧与性能优化
  • 2026年AI大模型推荐逻辑下中小企获客方案对比 - 筑云鲸
  • 找沈阳太阳能路灯生产厂家看这儿,选型避坑认准万明路灯 - 品牌优推
  • 超kagome晶格3d电子体系Sommerfeld系数增强与磁短程序
  • 如意 Django CRM 前端架构复盘:SvelteKit 如何重塑会话、路由与交付边界
  • 10分钟上手MiniMeToken:从部署到创建克隆代币的完整教程
  • 【青岛理工大学主办 | 青岛举办】第三届环境保护与污染控制国际学术会议(EPPC 2026)
  • 2026年上海GEO服务商选型指南:中小微企业高性价比方案参考 - 筑云鲸
  • ADR用户权限管理:细粒度安全控制的终极指南
  • 2026年郴州永兴黄金回收市场行情与合规门店实测 - 小仙贝贝
  • Unity 2D游戏智能寻路实战:NavMeshPlus配置与避坑指南
  • 一文读懂DeepSeek-V4-Flash-NVFP4:从模型架构到硬件支持的完整指南
  • M-LAG环境下PXE启动失败问题分析与优化
  • IPvFoo隐私保护机制解析:本地数据处理的安全设计
  • 北方地区超低温空气能选什么品牌:【芬尼】无惧严寒 - 晴光转树
  • 2026 关于我们重庆鸿善诚塑料供应 - 精彩城市
  • 2026赛级边牧犬舍**选购指南|正规犬舍评测与避坑攻略 - Full19
  • Casemove vs 手动操作:为什么CS2玩家需要这款桌面应用?
  • Windows电脑开机时间查看与优化全攻略
  • 佛山大板岩板瓷砖胶怎么选 - 商业大观
  • 2026年甄选:机电安装工程监理甲级资质服务公司专业实力与行业实践解析 - 优企名品
  • 一场关于“源头”的反思:当AI让数据治理回归业务本质
  • 佛山网站建设天博:拒绝套路,做有温度的数字化落地方案
  • 2026年蓝底证件照不求人:从手机到电脑的完整制作攻略 - 办公小帮手
  • 杭州市拱墅区GEO城市合伙人选型推荐哪家靠谱:2026年为什么优先看源头厂商、续约率与区域保护? - 科技快讯
  • KMS激活革命:3分钟搞定Windows和Office永久激活难题
  • dirty_sockv1 vs v2:哪个版本更适合你的渗透测试场景?对比分析
  • ECCV 2024亮点项目:CRM如何推动单图3D重建技术的边界?
  • 300㎡独栋别墅整装设计核心要点,太原金螳螂为你一一解锁 - 滚动商讯