数据结构与算法-分裂问题,将数字分成0或1,求l到r之间有多少个1.
// 分裂问题一个数n可以分裂成一个数组[n/2, n%2, n/2] 这个数组中哪个数不是1或者0就继续分裂下去。比如 n 5一开始分裂成[2, 1, 2] [2, 1, 2]这个数组中不是1或者0的数会继续分裂下去比如两个2就继续分裂 [2, 1, 2] - [1, 0, 1, 1, 1, 0, 1]那么我们说5最后分裂成[1, 0, 1, 1, 1, 0, 1]。每一个数都可以这么分裂在最终分裂的数组中假设下标从1开始给定三个数n、l、r返回n的最终分裂数组里[l,r]范围上有几个1。 n 2 ^ 50n是long类型 r - l 50000l和r是int类型。importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;public class Code_SplitZeroOne{// n100// n100, 最终裂变的数组长度多少 // n50, 最终裂变的数组长度多少 // n25, 最终裂变的数组长度多少 //..// n1,.最终裂变的数组长度多少 // 请都填写到lenMap中去 public static long len(long n, HashMapLong, LonglenMap){if(n0||n1){lenMap.put(n,1L);return1;}long halflen(n/2,lenMap);long all(half1)1;lenMap.put(n, all);returnall;}// n100// n100, 最终裂变的数组中一共有几个1 // n50, 最终裂变的数组一共有几个1 // n25, 最终裂变的数组一共有几个1 //..// n1,.最终裂变的数组一共有几个1 // 请都填写到onesMap中去 public static long ones2(long num, HashMapLong, LongonesMap){if(num1||num0){onesMap.put(num, num);returnnum;}// n1long halfones2(num /2, onesMap);long midnum %21?1:0;long allhalf *2 mid;onesMap.put(num, all);returnall;}public static long ones(long n, HashMapLong, LongonesMap){if(n0||n1){onesMap.put(n,n);returnn;}int mid(n %2)1?1:0;long halfones(n/2,onesMap);long all(half1) mid;onesMap.put(n, all);returnall;}public static long nums3(long n, long l, long r){//HashMapLong, LongallMapnew HashMap();HashMapLong, LonglenMapnew HashMap();HashMapLong, LongoneMapnew HashMap();long lenlen(n,lenMap);long onesones(n,oneMap);returndp2(n,l,r,lenMap,oneMap);}public static long dp2(long n, long l, long r, HashMapLong,LonglenMap, HashMapLong,LongonesMap){long allLenlenMap.get(n);if(l1allLenr){returnonesMap.get(n);}long all0;int mid(n%21)?1:0;long halfLen(allLen-1)/2;if(lhalfLen1){alldp2(n/2,l,Math.min(r,halfLen),lenMap,onesMap);}if(rhalfLen1){alldp2(n/2,Math.max(l-halfLen-1,1),r-halfLen-1,lenMap,onesMap);}all((lhalfLen1||rhalfLen1)?0:mid);return all;}//为了测试//彻底生成n的最终分裂数组返回 public static ArrayListIntegertest(long n){ ArrayListIntegerarrnew ArrayList();process(n,arr);return arr;} public static void process(long n,ArrayListIntegerarr){ if(n1||n0){ arr.add((int)n);} else { process(n/2,arr);arr.add((int)(n%2));process(n /2, arr);}}public static long nums1(long n, long l, long r){if(n1||n0){returnn1?1:0;}long halfsize(n /2);long leftlhalf ?0:nums1(n /2, l, Math.min(half, r));long mid(lhalf 1||rhalf 1)?0:(n1);long rightrhalf 1? nums1(n /2, Math.max(l - half -1,1), r - half -1):0;returnleft mid right;}public static long size(long n){if(n1||n0){return1;}else{long halfsize(n /2);return(half1)1;}}public static void main(String[]args){long num671;ArrayListIntegeranstest(num);int testTime10000;System.out.println(功能测试开始);for(int i0;itestTime;i){int a(int)(Math.random()* ans.size())1;int b(int)(Math.random()* ans.size())1;int lMath.min(a, b);int rMath.max(a, b);int ans10;for(int jl -1;jr;j){if(ans.get(j)1){ans1;}}long ans2nums1(num, l, r);long ans3nums3(num, l, r);if(ans1!ans2||ans1!ans3){System.out.println(出错了!);}}System.out.println(功能测试结束);System.out.println();System.out.println(性能测试开始);num(2L50) 22517998136L;long l30000L;long r800000200L;long start;long end;startSystem.currentTimeMillis();System.out.println(nums1结果 : nums1(num, l, r));endSystem.currentTimeMillis();System.out.println(nums1花费时间(毫秒) : (end - start));startSystem.currentTimeMillis();System.out.println(nums3结果 : nums3(num, l, r));endSystem.currentTimeMillis();System.out.println(nums3花费时间(毫秒) : (end - start));System.out.println(性能测试结束);System.out.println();System.out.println(单独展示nums2方法强悍程度测试开始);num(2L55) 22517998136L;l30000L;r6431000002000L;startSystem.currentTimeMillis();System.out.println(nums2结果 : nums3(num, l, r));//-1429513860endSystem.currentTimeMillis();System.out.println(nums2花费时间(毫秒) : (end - start));System.out.println(单独展示nums2方法强悍程度测试结束);}}

相关新闻

X-Mouse Controls效率革命:让窗口操作效率提升300%的智能配置指南

X-Mouse Controls效率革命:让窗口操作效率提升300%的智能配置指南

X-Mouse Controls效率革命:让窗口操作效率提升300%的智能配置指南 【免费下载链接】xmouse-controls Microsoft Windows utility to manage the active window tracking/raising settings. This is known as x-mouse behavior or focus follows mouse on Unix and L…

2026/5/17 9:14:06 阅读更多 →
4步消除Figma语言障碍:中文插件全流程应用指南

4步消除Figma语言障碍:中文插件全流程应用指南

4步消除Figma语言障碍:中文插件全流程应用指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN [核心痛点]:设计效率的隐形枷锁 为什么国内设计师使用Figma的平均…

2026/5/17 7:44:19 阅读更多 →
显卡驱动深度清理与系统优化技术指南

显卡驱动深度清理与系统优化技术指南

显卡驱动深度清理与系统优化技术指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller 显卡驱动残留是系统性能…

2026/7/4 10:32:28 阅读更多 →

最新新闻

NCM加密音乐文件本地化转换方案:从原理到自动化实践

NCM加密音乐文件本地化转换方案:从原理到自动化实践

1. 项目概述:从“加密枷锁”到“自由播放”如果你是一个音乐爱好者,尤其是网易云音乐的重度用户,那么你大概率在电脑的某个角落发现过一些以.ncm为后缀的奇怪文件。这些文件直接双击无法用常规播放器打开,想导入手机或车载U盘更是…

2026/7/5 9:32:39 阅读更多 →
RevokeMsgPatcher防撤回补丁:原理、风险与Windows微信/QQ/TIM实操指南

RevokeMsgPatcher防撤回补丁:原理、风险与Windows微信/QQ/TIM实操指南

1. 项目概述:为什么我们需要一个“防撤回补丁”? 在即时通讯软件里,“消息撤回”功能设计的初衷是给用户一个纠正错误的机会,比如打错字、发错人或者一时冲动说了不合适的话。但很多时候,这个功能也带来了信息不对等的…

2026/7/5 9:28:38 阅读更多 →
Folia:全屏沉浸式在线音乐播放器,多端体验+AI 主题生成带来独特听歌感受!

Folia:全屏沉浸式在线音乐播放器,多端体验+AI 主题生成带来独特听歌感受!

Folia 是一款以全屏沉浸式歌词播放为核心的在线音乐播放器,支持多平台,具备智能歌词匹配、AI 生成配色主题等功能,为用户带来独特听歌体验。项目亮点与特色Folia 支持网易云、navidrome 和本地音乐库。其独特之处在于智能歌词匹配&#xff0c…

2026/7/5 9:26:38 阅读更多 →
SQL注入攻防全解析:从原理到实战,掌握Web安全核心漏洞

SQL注入攻防全解析:从原理到实战,掌握Web安全核心漏洞

1. 项目概述:为什么SQL漏洞是面试官的“心头好”? 干了这么多年安全,也面过不少人,我发现一个挺有意思的现象:无论你是应聘渗透测试、安全开发还是安全运维,面试官几乎都会把SQL注入漏洞拎出来问一遍。从“…

2026/7/5 9:26:37 阅读更多 →
Weex架构安卓商城APP逆向工程包:含完整源码结构、APK资源解包与AndroidX/Support双兼容支持

Weex架构安卓商城APP逆向工程包:含完整源码结构、APK资源解包与AndroidX/Support双兼容支持

本文还有配套的精品资源,点击获取 简介:一套真实上线商城App的逆向分析成果,主逻辑基于Weex框架(main.js驱动),集成weex-main-jsfm.js、weex-rax-api.js等核心运行时模块,支持RAX组件开发&am…

2026/7/5 9:20:36 阅读更多 →
山东大学编译原理PL0实验代码:Java实现的词法扫描、递归下降语法分析与P-code解释器

山东大学编译原理PL0实验代码:Java实现的词法扫描、递归下降语法分析与P-code解释器

本文还有配套的精品资源,点击获取 简介:一套开箱即用的PL/0语言编译器教学实现,基于Java开发,完整覆盖编译流程三大阶段:词法分析通过GETSYM函数识别关键字、标识符、数字和分界符;语法分析采用递归下降…

2026/7/5 9:18:36 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻