列表

详情


3309. 连接二进制表示可形成的最大数值

给你一个长度为 3 的整数数组 nums

现以某种顺序 连接 数组 nums 中所有元素的 二进制表示 ,请你返回可以由这种方法形成的 最大 数值。

注意 任何数字的二进制表示 不含 前导零。

 

示例 1:

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

输出: 30

解释:

按照顺序 [3, 1, 2] 连接数字的二进制表示,得到结果 "11110",这是 30 的二进制表示。

示例 2:

输入: nums = [2,8,16]

输出: 1296

解释:

按照顺序 [2, 8, 16] 连接数字的二进制表述,得到结果 "10100010000",这是 1296 的二进制表示。

 

提示:

相似题目

连接连续二进制数字

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int maxGoodNumber(vector<int>& nums) { } };

cpp 解法, 执行用时: 0 ms, 内存消耗: 23.9 MB, 提交时间: 2024-10-09 21:59:04

class Solution {
public:
    int maxGoodNumber(vector<int>& nums) {
        ranges::sort(nums, [](int a, int b) {
            int len_a = __lg(a) + 1;
            int len_b = __lg(b) + 1;
            return (a << len_b | b) > (b << len_a | a);
        });

        int ans = 0;
        for (int x : nums) {
            ans = ans << (__lg(x) + 1) | x;
        }
        return ans;
    }
};

java 解法, 执行用时: 2 ms, 内存消耗: 40.8 MB, 提交时间: 2024-10-09 21:58:48

class Solution {
    public int maxGoodNumber(int[] nums) {
        // Integer[] arr = Arrays.stream(nums).boxed().toArray(Integer[]::new);
        Integer[] arr = new Integer[]{nums[0], nums[1], nums[2]};
        Arrays.sort(arr, (a, b) -> {
            int lenA = 32 - Integer.numberOfLeadingZeros(a);
            int lenB = 32 - Integer.numberOfLeadingZeros(b);
            return (b << lenA | a) - (a << lenB | b);
        });

        int ans = 0;
        for (int x : arr) {
            int lenX = 32 - Integer.numberOfLeadingZeros(x);
            ans = ans << lenX | x;
        }
        return ans;
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 2.2 MB, 提交时间: 2024-10-09 21:58:22

func maxGoodNumber(nums []int) (ans int) {
	slices.SortFunc(nums, func(a, b int) int {
		lenA := bits.Len(uint(a))
		lenB := bits.Len(uint(b))
		return (b<<lenA | a) - (a<<lenB | b)
	})

	for _, x := range nums {
		ans = ans<<bits.Len(uint(x)) | x
	}
	return
}

python3 解法, 执行用时: 27 ms, 内存消耗: 16.5 MB, 提交时间: 2024-10-09 21:58:03

class Solution:
    def maxGoodNumber(self, nums: list[int]) -> int:
        def cmp(a: int, b: int) -> int:
            len_a = a.bit_length()
            len_b = b.bit_length()
            return (b << len_a | a) - (a << len_b | b)
        nums.sort(key=cmp_to_key(cmp))

        ans = 0
        for x in nums:
            ans = ans << x.bit_length() | x
        return ans

上一题