2024-12-11:数组最后一个元素的最小值。用go语言,给定两个整数 n 和 x,构造一个长度为 n 的正整数数组 nums

举报
福大大架构师每日一题 发表于 2024/12/11 14:34:32 2024/12/11
【摘要】 2024-12-11:数组最后一个元素的最小值。用go语言,给定两个整数 n 和 x,构造一个长度为 n 的正整数数组 nums,使得数组中相邻元素递增且所有元素按位与的结果为 x。返回可能的最小 nums 数组中的最后一个元素的值。1 <= n, x <= 100000000。输入:n = 3, x = 4。输出:6。解释:数组 nums 可以是 [4,5,6] ,最后一个元素为 6 。答...

2024-12-11:数组最后一个元素的最小值。用go语言,给定两个整数 n 和 x,构造一个长度为 n 的正整数数组 nums,使得数组中相邻元素递增且所有元素按位与的结果为 x。返回可能的最小 nums 数组中的最后一个元素的值。

1 <= n, x <= 100000000。

输入:n = 3, x = 4。

输出:6。

解释:

数组 nums 可以是 [4,5,6] ,最后一个元素为 6 。

答案2024-12-11:

chatgpt

题目来自leetcode3133。

大体步骤如下:

1.计算变量 bitCount,表示 n 和 x 转换为二进制后的位数差。

2.设置初始解 res 为 x,并初始化另一个变量 m 为 n - 1。

3.通过循环处理每个位,检查 res 中每一位是否为 0。

4.如果某位为 0,则检查 m 对应位是否为 1,若是,则将 res 中该位设置为 1。

5.返回最终的 res 值,即可能的最小 nums 数组。

总体时间复杂度:

  • 该算法的时间复杂度取决于 bitCount,即 O(bitCount)。

  • bitCount 的计算时间复杂度为 O(1)。

  • 循环处理每个位的时间复杂度为 O(bitCount)。

  • 因此,总的时间复杂度为 O(bitCount)。

总体额外空间复杂度:

  • 该算法只使用少量变量来存储数据,额外空间复杂度为 O(1),即为常量级别的空间消耗。

Go完整代码如下:

package main

import (
	"fmt"
	"math/bits"
)

func minEnd(n int, x int) int64 {
	bitCount := 128 - bits.LeadingZeros(uint(n)) - bits.LeadingZeros(uint(x))
	res := int64(x)
	m := int64(n) - 1
	j := 0
	for i := 0; i < bitCount; i++ {
		if res&(1<<i) == 0 {
			if m&(1<<j) != 0 {
				res |= 1 << i
			}
			j++
		}
	}
	return res
}

func main() {
	n := 3
	x := 4
	fmt.Println(minEnd(n, x))
}

在这里插入图片描述

Rust完整代码如下:

fn min_end(n: i64, x: i64) -> i64 {
    let bit_count = 128 - n.leading_zeros() - x.leading_zeros();
    let mut res = x as i64;
    let m = (n - 1) as i64;
    let mut j = 0;
    for i in 0..bit_count {
        if res & (1 << i) == 0 {
            if m & (1 << j) != 0 {
                res |= 1 << i;
            }
            j += 1;
        }
    }
    res
}

fn main() {
    let n = 3;
    let x = 4;
    println!("{}", min_end(n, x));
}

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。