2021-12-30:分裂问题。 一个数n,可以分裂成一个数组[n/2, n%2, n/2], 这个数组中哪个数不是1或者0,就继续分裂下去。 比如 n = 5,一开始分裂成[2, 1, 2], [2
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 main
import "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) + 1
mid := n & 1
if l == 1 && r >= all {
if _, ok := allMap[n]; ok {
return allMap[n]
} else {
count := dp(n/2, 1, half, allMap)
ans := (count << 1) + mid
allMap[n] = ans
return 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
}
}
执行结果如下:
2021-12-30:分裂问题。 一个数n,可以分裂成一个数组[n/2, n%2, n/2], 这个数组中哪个数不是1或者0,就继续分裂下去。 比如 n = 5,一开始分裂成[2, 1, 2], [2的更多相关文章
- js 中日期2013-08-30或2019-08-24 12:30:00 转换成时间戳,和2019-08-29T02:15:08.000+0000转化为2019-08-29T02:15:08
js 中日期2019-08-24 或2019-08-24 12:30:00 转换成时间戳 首先将它转成date日期类型,然后获取毫秒形式时间戳 let date=new Date("2019 ...
- 2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组)
2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组) https://www.luogu.com.cn/problem/P2516 题意: 给定字符串 \(S\) ...
- 2021.12.16 eleveni的刷题记录
2021.12.16 eleveni的刷题记录 1. 数论 https://www.luogu.com.cn/problem/P2532 1.1卡特兰数 https://www.luogu.com.c ...
- 2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串)
2021.12.09 [HEOI2016/TJOI2016]排序(线段树+二分,把一个序列转换为01串) https://www.luogu.com.cn/problem/P2824 题意: 在 20 ...
- 2021.12.08 平衡树——FHQ Treap
2021.12.08 平衡树--FHQ Treap http://www.yhzq-blog.cc/fhqtreapzongjie/ https://www.cnblogs.com/zwfymqz/p ...
- 2021.12.06 平衡树——Treap
2021.12.06 平衡树--Treap https://www.luogu.com.cn/blog/HOJQVFNA/qian-xi-treap-ping-heng-shu 1.二叉搜索树 1.1 ...
- 2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS)
2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS) https://www.luogu.com.cn/problem/P2501 题意: 现在我们有一个长度为 n 的整 ...
- EZ 2017 12 30 2018noip第二次膜你赛
去年的比赛了,然而今天才改好. 总体难度适中,有大佬AK. 主要是自己SB第二题没想出来,然后又是可怜的100来分. T1 一道二分+数学的题目. 我们可以二分叫的次数,然后用公式(等差数列,公差都是 ...
- new Date(2019-08-24 12:30:00)和new Date(2019-08-29T02:15:08.000+0000)在ios的兼容NAN问题
new Date()在安卓和pc端上正常显示,但是却在ios上显示 NAN的问题 正常写法: var time = new Date("2019-08-24 12:30:00"); ...
- 2018.12.30【NOIP提高组】模拟赛C组总结
2018.12.30[NOIP提高组]模拟赛C组总结 今天成功回归开始做比赛 感觉十分良(zhōng)好(chà). 统计数字(count.pas/c/cpp) 字符串的展开(expand.pas/c ...
随机推荐
- django 批量提交
https://www.cnblogs.com/lbzbky/articles/11792545.html
- AbstractRoutingDataSource - 动态数据源
AbstractRoutingDataSource 类说明: (1)它的抽象方法 determineCurrentLookupKey() 决定使用哪个数据源. (2)项目启动时,先调用 setTarg ...
- windows下使用Wireshark调试chrome浏览器的HTTP/2流量
1.在Wireshark官网(https://www.wireshark.org/#download)下载对应的Wireshark安装包,进行安装 2.增加系统环境变量设置(计算机 -- 右键 -- ...
- json.dumps和json.loads,get和post
一.json.dumps()和json.loads()概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) json.dumps() ...
- 使用VSCode调试C#时,Console.ReadLine()弹出命令框调试
原文链接:https://blog.csdn.net/qq_29503199/article/details/88351498 要在调试时读取输入,可以在 launch.json 中使用配置中的 ...
- 一篇文章带你快速入门学习RPA
大纲: 什么是RPA? RPA的应用领域有哪些? RPA机器人技术一般用于什么行业? RPA的市场需求是什么? RPA项目的实施过程? RPA的未来趋势怎么样? 什么是RPA? RPA 全称& ...
- nginx+lua+openresty+kafka相关问题汇总
这里使用的是kafka插件是doujiang大佬的https://github.com/doujiang24/lua-resty-kafka,版本为v0.2.0. 应用场景 在nginx转发中,记录非 ...
- windows作业系统部署nfs服务
文件共享的需求是如何产生的? 据说当年美国和苏联冷战期间,双方都有摧毁对方的能力.而苏联 不怕死的性格让美国人多少有些害怕.美国当时害怕自己的军事指挥中心被苏联摧毁.于是,美国建立了阿帕网,并把自己的 ...
- ArchLinux 作业系统安装教程
如果你能看到此文,想必你一定玩过不少的发行商发行的 Linux 作业系统或者听说过很多发行商发行的 Linux 作业系统.如果你玩过不少的 Linux 作业系统,对于安装系统可谓是轻车熟路,就是闭着眼 ...
- [ACM]NOIP2011D1T1复现-铺地毯
逆向考虑即可解决 #include<iostream> using namespace std; const int maxn= 100000 +5; int a[maxn][4];//0 ...