2021-12-30:分裂问题。
一个数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 ^ 50,n是long类型,
r - l <= 50000,l和r是int类型。
我们的课加个码:
n是long类型随意多大都行,
l和r也是long类型随意多大都行,但要保证l<=r。
来自腾讯。

答案2021-12-31:

每次裂变都放到map中。
时间复杂度:O(logN)。
空间复杂度:O(logN)。

代码用golang编写。代码如下:

package mainimport "fmt"func main() {ret := nums2(5, 4, 7)fmt.Println(ret)
}func nums2(n, l, r int) int {allMap := make(map[int]int)return dp(n, l, r, allMap)
}func size(n int) int {if n == 1 || n == 0 {return 1} else {half := size(n / 2)return (half << 1) + 1}
}func dp(n, l, r int, allMap map[int]int) int {if n == 1 || n == 0 {return twoSelectOne(n == 1, 1, 0)}half := size(n / 2)all := (half << 1) + 1mid := n & 1if l == 1 && r >= all {if _, ok := allMap[n]; ok {return allMap[n]} else {count := dp(n/2, 1, half, allMap)ans := (count << 1) + midallMap[n] = ansreturn ans}} else {mid = twoSelectOne((l > half+1 || r < half+1), 0, mid)left := twoSelectOne(l > half, 0, dp(n/2, l, getMin(half, r), allMap))right := twoSelectOne(r > half+1, dp(n/2, getMax(l-half-1, 1), r-half-1, allMap), 0)return left + mid + right}
}func twoSelectOne(c bool, a, b int) int {if c {return a} else {return b}
}func getMax(a, b int) int {if a > b {return a} else {return b}
}func getMin(a, b int) int {if a < b {return a} else {return b}
}

执行结果如下:


左神java代码

2021-12-30:分裂问题。 一个数n,可以分裂成一个数组[n/2, n%2, n/2], 这个数组中哪个数不是1或者0,就继续分裂下去。 比如 n = 5,一开始分裂成[2, 1, 2], [2相关推荐

  1. 东软始业教育结业考试 2021.12.30

    一.单选题 1企业文化的三个层次包括精神理念层,()和形象物质层.1分/1分 A.行为管理层 B.行为制度层 C.制度理念层 D.管理制度层 提交答案:B正确答案:B 展开解析 2中国最大的离岸软件外 ...

  2. 2021.1.30课程摘要(逻辑教育-王劲胜)

    2021.1.30课程摘要 逻辑教育-13期-Python基础班-王劲胜 一.集合 二.函数(上) 三.作业讲解 逻辑教育-13期-Python基础班-王劲胜 一.集合 1.集合简介 • 集合表现形式 ...

  3. 2021.03.30【2021省赛】模拟 比赛总结

    2021.03.30[2021省赛]模拟 比赛总结 地址: https://gmoj.net/senior/#contest/home/3350 T1: 神奇纸牌(uno) T2: 凌乱平衡树 (tr ...

  4. 2021.12.20-12.26 AI行业周刊(第77期):平平淡淡的人生

    篇章一:人生的真谛 不知不觉,2021年已经走到了年尾,下周再看到周刊的文章时,已经是2022年了. 回想这一年,年前树立的目标实现了吗?是否有遗憾?有憧憬? 上周去青岛出差,参与公司一个政府AI项目 ...

  5. Java初级知识复习-2021.12.27~2022.02.09

    文章目录 Java语法基础1 1.Java简介 Java三大版本含义 Java的特性和核心优势 2.Java开发环境配置 Java应用程序的运行机制 开发环境搭建 3.Java基础语法 4.Java基 ...

  6. DayDayUp:吴晓波—2018.12.30年终秀——《预见2019:国运70》演讲重点概览【文字+视频】

    DayDayUp:吴晓波-2018.12.30年终秀--<预见2019:国运70>演讲重点概览[文字+视频] 目录 一.回顾2018 回看2017年终秀的8个预言 五大悬念 二.展望201 ...

  7. 2021/10/30的1+X大数据Java答案

    2021/10/30 步骤二 public Member() { }public Member(String name,String pwd,float score,int rank) {this.n ...

  8. 2021.12.6-12.12 AI行业周刊(第75期):AI流程化

    篇章一:AI流程化 如果深度参与很多的人工智能项目,很多人会发现,大多数的项目都是长尾场景. 以城市管理和工业视觉两个方向为例,城市管理更偏向于智慧城市.智慧交通等领域,而工业视觉则偏向于工业自动化领 ...

  9. 2021.12.28activiti

    2021.12.28activiti 1.使用流程 部署activiti activiti是一个工作流引擎(其实就是一堆jar包api),业务系统访问(操作)activiti的接口,就可以方便的操作流 ...

最新文章

  1. oracle rodo 查看大小,Checkpoint not complete故障
  2. 奚记--最简洁的记账软件
  3. 前端学习(799):根据位置返回字符
  4. bmp280c语言程序,51单片机读取BMP280 180 280气压值1602显示程序
  5. ArcGIS API + Echarts 实现动态雷达图
  6. Site-Site Ipsec ×××配置和验证
  7. ip-guard网页浏览放开微信二维码和QQ截图
  8. pde中微元分析法的主要思想_有限元法(FEM)
  9. 测试网卡芯片型号的软件,查看电脑无线网卡型号_查看无线网卡芯片型号
  10. 用观察者模式设计一个气象台
  11. URL是什么意思?基础知识普及
  12. html制作钢铁侠心脏,心脏术后我变成了“钢铁侠”
  13. 远程控制计算机显示为什么不能满屏,win7系统连接远程桌面却不能全屏显示的解决方法...
  14. 2017-4-15,16_akala啦_新浪博客
  15. Windows10 错误代码:0xc000007b 问题解决
  16. 三大主流Mac清理软件实测:Cleaner One | 柠檬清理 | CleanmyMac
  17. 【Oracle】plsql连接64位的Oracle
  18. webpack2.0+ vue2.0
  19. 微软新冠病毒感染员工的自白
  20. 一键清理浏览器缓存bat文件

热门文章

  1. ZY-Player安静看电影
  2. 不切换 Git 分支,却能同时在多个分支上工作,我是怎么做到的?
  3. 【arcgis符号库使用教程】
  4. My unqualified host name () unknown; sleeping for XX
  5. MATLAB中cla函数
  6. 异地多活架构的3种模式
  7. 叮咚~您有一份个税申报,请查收!
  8. 海量数据处理问题汇总
  9. 2021年12月电子学会Python等级考试试卷(二级)答案解析
  10. 丹佛斯变频器al13故障_丹佛斯变频器常见故障维修