首页 > 其他分享 >2024-05-15:用go语言,考虑一个整数 k 和一个整数 x。 对于一个数字 num, 在其二进制表示中, 从最低有效位开始, 我们计算在 x,2x,3x 等位置处设定位的数量来确定其价值。

2024-05-15:用go语言,考虑一个整数 k 和一个整数 x。 对于一个数字 num, 在其二进制表示中, 从最低有效位开始, 我们计算在 x,2x,3x 等位置处设定位的数量来确定其价值。

时间:2024-05-15 15:53:48浏览次数:22  
标签:cnt 数字 二进制 整数 num go pre1

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:

chatgpt

题目来自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)
}

在这里插入图片描述

标签:cnt,数字,二进制,整数,num,go,pre1
From: https://www.cnblogs.com/moonfdd/p/18194029

相关文章

  • 洛谷题单指南-动态规划3-P4342 [IOI1998] Polygon
    原题链接:https://www.luogu.com.cn/problem/P4342题意解读:环中节点表示数字,边表示运算符,可以任意断一条边,其余节点两两按边的符号计算,求结果的最大值,以及最大值是断开那些边可以得到。解题思路:题意中有几个个关键信息:环形,节点数为n,边数为n任意断一条边,即可以从任意节点开始,......
  • 错误解决 TypeError: __init__() got an unexpected keyword argument 'size'import l
    TypeError:__init__()gotanunexpectedkeywordargument'size'importlogging代码段如下importloggingimportosfromgensim.modelsimportword2veclogging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',level=logging.IN......
  • IceRPC之调用管道Invocation pipeline与传出请求Outgoing request->快乐的RPC
    作者引言.Net8.0下的新RPC很高兴啊,我们来到了IceRPC之调用管道Invocationpipeline与传出请求Outgoingrequest->快乐的RPC,基础引导,让自已不在迷茫,快乐的畅游世界。调用管道Invocationpipeline了解如何发送请求requests和接收响应responses。定义发送请求并接收......
  • 【django学习-24】自定义插件
    1.ModelForm可以帮助我们生成HTML标签,这种是普通的标签classUserModelForm(forms.ModelForm):classMeta:model=models.UserInfofields=["name","password",]form=UserModelForm()2.如果我们要使用bootstrap的标签,该怎么操作呢?2.1:自定义......
  • TypeScript 枚举类型(enum),声明常量
    enumErrorShowType{ SILENT=0, WARN_MESSAGE=1, ERROR_MESSAGE=2, NOTIFICATION=3, REDIRECT=9,} 这是一个枚举类型(enum)的定义,名为ErrorShowType。枚举类型是一种数据类型,它允许你定义一组命名的常量值。在这个例子中,ErrorShowType枚举类型包含......
  • django启动时执行某个操作数据库的方法怎么实现
    为了让django启动时就执行某些方法做了如下尝试一、在Django中,可以通过AppConfig类的ready()方法来实现在Django启动时执行某个方法。首先,在你的应用的apps.py文件中,创建一个继承自AppConfig类的子类,并重写ready()方法。例如,假设你的应用名为myapp,则可以创建一个MyAppConfig类:......
  • 【强化学习】A grid world 值迭代算法 (value iterator algorithm)
    强化学习——值迭代算法代码是在jupyternotebook环境下编写只需要numpy和matplotlib包。此代码为学习赵世钰老师强化学习课程之后,按照公式写出来的代码,对应第四章第一节valueiteratoralgorithm可以做的实验:调整gama值观察策略的变化调整惩罚值(fa)的大小观察......
  • golang- 实现多环境配置
    需要安装插件gogetgopkg.in/yaml.v3配置yaml文件  然后配置数据块与yaml结构相同,用来接收数据,字段需要配置映射关系,如下完整的执行代码如下//初始化yaml文件funcdoYaml(){envName:=ParamsObj.EnvifStringUtil.IsEmpty(envName){envNa......
  • Go-Zero定义API实战:探索API语法规范与最佳实践(五)
    前言上一篇文章带你实现了Go-Zero模板定制化,本文将继续分享如何使用GO-ZERO进行业务开发。通过编写API层,我们能够对外进行接口的暴露,因此学习规范的API层编写姿势是很重要的。通过本文的分享,你将能够学习到Go-Zero的API语法规范,以及学会实际上手使用。概述下文所说的是api......
  • Django RESTful API设计与实践指南
    title:DjangoRESTfulAPI设计与实践指南date:2024/5/1415:37:45updated:2024/5/1415:37:45categories:后端开发tags:DjangoRESTAPI设计版本控制安全认证性能优化部署策略实战项目第1章:Django基础知识1.1Django简介:Django是一个使用Python语言开发......