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 ...
随机推荐
- #单位根反演,二项式定理#LOJ 6247 九个太阳
题目 \[\large {\sum_{i=0}^n[k|i]C(n,i)}\pmod {998244353} \] 其中\(n\leq 10^{18}\),\(k=2^p,p\in [0,20]\) ...
- 12个月大厂主机免费领AWS Azure Google-Cloud还不快到碗里来
目录 简介 AWS Azure Google Cloud Oracle 总结 简介 最近有个朋友问我哪里有免费主机可以领,说实话这个问题也困扰了我很久,之前也在网上寻找免费主机,可是免费的基本上都有一 ...
- 从零开始学Spring Boot系列-SpringApplication
SpringApplication类提供了一种从main()方法启动Spring应用的便捷方式.在很多情况下, 你只需委托给 SpringApplication.run这个静态方法 : @Spring ...
- Linux 使用 crontab 定时拆分日志、清理过期文件
@ 目录 前言 简介 一.准备工作 1.1 创建写入脚本 1.2 设置执行权限 1.3 添加定时任务 1.4 配置生效 二.Tomcat日志 按每天分割 2.1 创建一个 sh文件 2.2 设置执行权 ...
- WPF/MVVM模式入门教程(一):简介与规范
引用:https://www.cnblogs.com/flh1/p/12421652.html 什么是MVVM模式? MVVM的全称是--Model.View.ViewModel,翻译过来就是:模型. ...
- 深度剖析:Dubbo使用Nacos注册中心的坑
2020年笔者在做微服务部件升级时,Dubbo的注册中心从Zookeeper切换到Nacos碰到个问题,最近刷Github又有网友提到类似的问题,就在这篇文章里做个梳理和总结. 1.问题描述 前几年我 ...
- 初学STM32 SDIO(一)
1. SDIO协议简介 SDIO全称是安全数字输入/输出接口 ,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口. 多媒体卡(MMC).SD卡. S ...
- spring boot @propertySource @importResource @Bean [六]
@propertySource 指定property的配置源. 创建一个person.property: 然后修改person注解; 在运行test之后,结果为: @importResource 这个 ...
- 第五章-for循环的练习
/* * @Issue: 每个苹果0.8元,第一天买两个苹果,从第二天开始,每天买前一天的两倍,直至购买的苹果数量 * 个数达到不超过100的最大值,编写程序求每天平均花多少钱. * @Author: ...
- Apache Flink 在京东的实践与优化
简介: Flink 助力京东实时计算平台朝着批流一体的方向演进. 本文整理自京东高级技术专家付海涛在 Flink Forward Asia 2020 分享的议题<Apache Flink 在京 ...