news 2026/9/23 7:07:24

解决leetcode第4059题字典序最大的答案数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
解决leetcode第4059题字典序最大的答案数组

4059.字典序最大的答案数组

难度:困难

问题描述:

给你一个长度为n的整数数组nums。你可以重新排列其中的元素以形成任意排列perm。

定义一个长度为15的数组power。对于每个0<=i<15,考查perm的前j个元素的第(14-i)位,power[i]是满足这些位全为1的最大整数j(其中0<=j<=n)。

二进制位的位置从右向左编号,从第0位开始。

返回可能得到的字典序最大的power数组。

排列是数组中所有元素的一种重新排列。

置位指的是数字在二进制表示中对应位的值为1。

对于两个长度相同的数组,如果在它们不同的第一个下标处,数组a包含的元素大于数组b中的元素,则称数组a的字典序大于数组b。

示例1:

输入:nums=[7,5]

输出:[0,0,0,0,0,0,0,0,0,0,0,0,2,1,2]

解释:

选择perm=[7,5]。

两个元素的第2位都置位了,因此power[12]=2。

第一个元素的第1位置位了,但第二个元素没有,因此power[13]=1。

两个元素的第0位都置位了,因此power[14]=2。

第一个元素的所有更高位都未置位,因此其余项都为0。

示例2:

输入:nums=[3,1,7]

输出:[0,0,0,0,0,0,0,0,0,0,0,0,1,2,3]

解释:

选择perm=[7,3,1]。

第一个元素的第2位置位了,但第二个元素没有,因此power[12]=1。

前两个元素的第1位都置位了,但第三个元素没有,因此power[13]=2。

所有三个元素的第0位都置位了,因此power[14]=3。

第一个元素的所有更高位都未置位,因此其余项都为0。

提示:

1<=nums.length<=5*10**4

0<=nums[i]<2**15

问题分析:

这个问题很难读懂,必须结合后面的示例反复阅读,才能够找到那么一丝丝的感觉,因而越发显出它的不凡之处。

其实要获得字典序最大的power数组,关键在于perm这个看似是原数组nums的任意排列,其实只能取nums的降序排列形式,才能得到字典序最大的power数组。

为此程序设计了三个函数来解决这一问题:

函数 int_change_to_15_binary(num)将一个num整数转化为15位的二进制字符串并返回;

函数 get_1_nums_of_index_i(binary_array_15,i)从一个由15位二进制字符串组成的数组中统计出各个二进制字符串的第i位是字符1的个数并返回;

函数get_power_array_from_perm(perm)则根据传入的经过降序处理的二进制字符串数组perm得到最终结果power数组并返回。

主程序则先对输入的nums数组进行降序排序,然后转化为15位进制字符串数组,最后调用get_power_array_from_perm(perm)得到最终结果,问题得以解决。

程序如下:

#将一个整数num转化为15位二进制数并返回 def int_change_to_15_binary(num): num=bin(num)[2:] n=len(num) num='0'*(15-n)+num return num #检查一个由15位二进制数字符串所组成的数组第i位上1的个数并返回 def get_1_nums_of_index_i(binary_array_15,i): i_str=''.join([x[i] for x in binary_array_15]) return i_str.count('1') #从perm数组中统计并得出power数组返回 def get_power_array_from_perm(perm): power=[] pr_array=[] for i in perm: pr_array.append(int_change_to_15_binary(i)) for i in range(15): power.append(get_1_nums_of_index_i(pr_array,i)) return power #主程序 nums=eval(input('pls input nums=')) nums.sort(reverse=True) print(get_power_array_from_perm(nums))

运行实例一

pls input nums=[5,10,30]

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1]

运行实例二

pls input nums=[3,1,7]

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3]

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/23 7:06:42

基于 Java Spring Boot 的货运通服务平台设计与实现

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 1. 项目背景与意义 随着物流行业的快速发展&#xff0c;传统货运管理方式存在信息不透明、调度效率低、货物跟踪困难等问题。本文设计并实现一个基于 Java Spring Boot…

作者头像 李华
网站建设 2026/9/23 7:05:29

Electron+Python开发晨间效率工具实战

1. 项目背景与核心需求每天早上开机后的前30分钟&#xff0c;往往是工作效率最低的时段。大多数人会陷入"开机发呆"的状态&#xff1a;机械地打开邮箱、社交软件、新闻网站&#xff0c;然后漫无目的地浏览&#xff0c;等到真正开始工作时&#xff0c;宝贵的晨间精力已…

作者头像 李华
网站建设 2026/9/23 7:04:35

学术论文审稿意见处理全攻略:从解析到实战

1. 论文投稿的生死关卡&#xff1a;审稿意见解析第一次收到期刊审稿意见时&#xff0c;我的手心全是汗。那密密麻麻的修改建议里&#xff0c;藏着论文能否被录用的关键密码。作为在学术圈摸爬滚打十年的"老油条"&#xff0c;我逐渐摸清了审稿人的思维模式——他们就像…

作者头像 李华
网站建设 2026/9/23 6:57:07

2026年AI四大前沿技术解析与应用场景

1. 前沿模型技术全景解析2026年的AI模型能力边界正在被四大技术方向重新定义&#xff1a;混合专家系统&#xff08;MoE&#xff09;、多模态融合、超长上下文窗口和自进化架构。这些技术突破正在从实验室走向商业应用&#xff0c;彻底改变人机交互的底层逻辑。MoE架构通过动态路…

作者头像 李华
网站建设 2026/9/23 6:56:18

Android图形渲染进阶:从GLSurfaceView到手动EGL环境管理

用了两年GLSurfaceView&#xff0c;我一直觉得它是 Android 平台上最省心的封装。直到我开始接视频滤镜、多路画面混合和自定义渲染管线&#xff0c;才发现它的封装也成了天花板。那段时间我花了不少力气把GLSurfaceView从核心链路里摘掉&#xff0c;自己接管 EGL 环境、渲染线…

作者头像 李华
网站建设 2026/9/23 6:54:40

金融级系统实战:从账务一致性到高可用架构的设计要点

接手 financial-services 这个项目的时候&#xff0c;我犯过一个典型的错误&#xff1a;把它当成一个普通的交易类网站来做。直到一次内测中&#xff0c;用户同时收到扣款短信和退款短信&#xff0c;账户余额却对不上&#xff0c;我才意识到&#xff0c;金融服务系统的复杂度从…

作者头像 李华