2024-05-15:用go语言,考虑一个整数 k 和一个整数 x。 对于一个数字 num, 在其二进制表示中, 从最低有效位开始, 我们计算在 x,2x,3x 等位置处设定位的数量来确定其价值。
2024-05-15:用go语言,考虑一个整数 k 和一个整数 x。
对于一个数字 num,
在其二进制表示中,
从最低有效位开始,
我们计算在 x,2x,3x 等位置处设定位的数量来确定其价值。
举例说明,
若对于 x=1,num=13,则二进制表示为000001101,对应的价值为3。
又如,当x=2,num=13,二进制表示依然为000001101,但对应的价值是1。
另一个例子是当x=3,num=362,二进制表示为101101010,价值为2。
一个数字的累加价值是从1到该数字的所有数字的总价值。
如果一个数字的累加价值小于或等于 k,则我们认为它是廉价的。
现在,我们需要找到最大的廉价数字。
输入:k = 9, x = 1。
输出:6。
答案2024-05-15:
题目来自leetcode3007。
大体步骤如下:
1.将输入的整数 k 转换为 int 类型,并初始化变量 num 和 pre1 为 0。
2.使用 bits.Len() 函数来计算 (k+1) << x 的二进制表示的位数,将结果减去 1,得到最高有效位的索引 i。
3.从 i 开始遍历到 0,每次循环减少 i 的值。
4.在每次循环中,计算 cnt 的值,cnt = pre1 << i + (i / x) << i >> 1。
5.如果 cnt 大于 k,则跳过当前循环。
6.否则,将 k 减去 cnt,并且通过位运算将 num 的第 i 位设置为 1。
7.如果 (i+1) 是 x 的倍数,则将 pre1 的值加 1。
8.循环结束后,返回 num - 1。
总的时间复杂度:O(log(k+1) * log((k+1)<<x)),其中 log(k+1) 是计算 (k+1) 的二进制表示的位数,log((k+1)<<x) 是计算 (k+1)<<x 的二进制表示的位数。
总的额外空间复杂度:O(1),只使用了常数级别的额外空间。
Go完整代码如下:
package main
import (
"fmt"
"math/bits"
)
func findMaximumNumber(K int64, x int) int64 {
k := int(K)
num, pre1 := 0, 0
for i := bits.Len(uint((k+1)<<x)) - 1; i >= 0; i-- {
cnt := pre1<<i + i/x<<i>>1
if cnt > k {
continue
}
k -= cnt
num |= 1 << i
if (i+1)%x == 0 {
pre1++
}
}
return int64(num - 1)
}
func main() {
k := int64(9)
x := 1
result := findMaximumNumber(k, x)
fmt.Println(result)
}
2024-05-15:用go语言,考虑一个整数 k 和一个整数 x。 对于一个数字 num, 在其二进制表示中, 从最低有效位开始, 我们计算在 x,2x,3x 等位置处设定位的数量来确定其价值。的更多相关文章
- TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠
TypeLoadException: 未能从程序集"ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ...
- C语言的本质(15)——C语言的函数接口入门
C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...
- JS垃圾回收——和其他语言一样,JavaScript 的 GC 策略也无法避免一个问题:GC 时,停止响应其他操作,这是为了安全考虑
JavaScript 内存管理 & 垃圾回收机制 标记清除 js 中最常用的垃圾回收方式就是标记清除.当变量进入环境时,例如,在函数中声明一个变量,就将这个而变量标记为“进入环境”.从逻辑上讲 ...
- 思想无语言边界:以 cglib 介绍 AOP 在 java 的一个实现方式
0. 前言 上接:基于 Source Generators 做个 AOP 静态编织小实验 作为第三篇,我们基于cglib在java做一个简单的aop例子, 以此简单作为例子说一个思路在什么样的语言里面 ...
- C 语言学习的第 05 课:C 语言基础(01)
C语言程序中的绝大部分应该记录在以.c作为扩展名的文件里,这种文件叫做C语言 程序的源文件. C语言中还包括以.h作为扩展名的文件,这种文件叫做头文件. C语言中的四则运算: 加:+ 减:- 乘 ...
- 如何使页面滚动条移动到指定元素element的位置处?
如何使页面滚动条移动到指定元素element的位置处? 在用selenium做测试时,会遇到需要操作的元素不在当前可视页面中的情况,如果是手工测试,自然很简单,手动拖拽滚动条到目标元素处即可. 那么, ...
- 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j
//整数数组的定义,然后输入一个整数x,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j: //如果X在该阵列,返回位置的阵列中的数. 资源: #include<iostr ...
- 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)
最近招聘季,看JULY大哥的面试100题时,碰到这么一个扩展问题: 如何用一个语句判断一个整数是不是二的整数次幂?(此题在编程之美也有) easy, 2的整数次幂的二进制形式只有一个1,只要用i和i- ...
- nginx 1.15.10 前端代理转发 将多个地址,代理转发到一个地址和端口 多系统公用一个cookie 统一token
nginx 1.15.10 前端代理转发 将多个地址,代理转发到一个地址和端口 多系统公用一个cookie 统一token 注意: proxy_pass http://192.168.40.54:22 ...
- 用PHP写一个最简单的解释器Part4(写一个最简单的脚本语言)
好吧!我承认我想标题党了.大家对解释器的吸引,绝对没有自己动手写一个脚本语言更有吸引力.不过如果看到标题过来的,可能也是 我承认,之前收藏的减肥视频,我都是这样对待他们的. 不过我还是相信很多程序猿o ...
随机推荐
- #莫队,bitset#洛谷 3674 小清新人渣的本愿
题目 分析 只要做到\(O(n\sqrt{n})\)的时间复杂度就可以了 考虑莫队,首先乘号就是枚举\(x\)的约数\(d\), 判断\(d\)和\(\frac{x}{d}\)是否同时出现, 再考虑差 ...
- 使用OHOS SDK构建libxml2
参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://gitlab.gnome.org/GNOME/ ...
- 动态规划(五)——坐标dp
传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵, 而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了 ...
- nginx重新整理——————http请求的11个阶段中的日志阶段[十九]
前言 简单介绍一下access log 阶段. 正文 日志模块是 ngx_http_log_module,这个模块无法禁用,内置的. 结 上面是日志的用法.主要的一个内容是日志如果是变量的话,那么需要 ...
- 抓包整理————tcp 协议[八]
前言 简单介绍一下tcp 协议. 正文 tcp历史: advanced research projects agency network: 1973年: tcp/ip 协议 tcpv4 协议分层后的网 ...
- 力扣182(MySQL)-查找重复的电子邮箱(简单)
题目: 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. 示例: 解题思路: 方法一: 使用group by 按Email来分组,然后使用having选择count(id)> ...
- CSP 考前集训 10/15
\({\color{Green} \mathrm{A\ -\ 染色}}\) 观察此题,我们可以发现正序维护不好求,会有红点被覆盖等情况. 考虑倒着求,每一次如果操作是红那么久看区间内有多少已经染色的点 ...
- HarmonyOS NEXT应用开发实战—组件堆叠
介绍 本示例介绍运用Stack组件以构建多层次堆叠的视觉效果.通过绑定Scroll组件的onScroll滚动事件回调函数,精准捕获滚动动作的发生.当滚动时,实时地调节组件的透明度.高度等属性,从而成功 ...
- HarmonyOS NEXT应用开发之下拉刷新与上滑加载案例
介绍 本示例介绍使用第三方库的PullToRefresh组件实现列表的下拉刷新数据和上滑加载后续数据. 效果图预览 使用说明 进入页面,下拉列表触发刷新数据事件,等待数据刷新完成. 上滑列表到底部,触 ...
- 龙蜥正式开源 SysOM:百万级实战经验打造!一站式运维管理平台 | 龙蜥技术
简介:SysOM集监控.告警.诊断.修复.安全能力于一体的操作系统运维平台. 文/系统运维 SIG 如果你被突如其来的 OOPS 和满屏奇怪的函数弄得满头问号?机器内存明明很大,却申请不出来内存 ...