LeetCode 3314.构造最小位运算数组 I:今日先简单题简单做-到II再优化

【LetMeFly】3314.构造最小位运算数组 I:今日先简单题简单做-到II再优化

力扣题目链接:https://leetcode.cn/problems/construct-the-minimum-bitwise-array-i/

给你一个长度为 n 的质数数组 nums 。你的任务是返回一个长度为 n 的数组 ans ,对于每个下标 i ,以下条件 均成立:

  • ans[i] OR (ans[i] + 1) == nums[i]

除此以外,你需要 最小化 结果数组里每一个 ans[i]

如果没法找到符合 条件ans[i] ,那么 ans[i] = -1

质数 指的是一个大于 1 的自然数,且它只有 1 和自己两个因数。

示例 1:
**输入:**nums = 2,3,5,7

输出:-1,1,4,3

解释:

  • 对于 i = 0 ,不存在 ans[0] 满足 ans[0] OR (ans[0] + 1) = 2 ,所以 ans[0] = -1
  • 对于 i = 1 ,满足 ans[1] OR (ans[1] + 1) = 3 的最小 ans[1]1 ,因为 1 OR (1 + 1) = 3
  • 对于 i = 2 ,满足 ans[2] OR (ans[2] + 1) = 5 的最小 ans[2]4 ,因为 4 OR (4 + 1) = 5
  • 对于 i = 3 ,满足 ans[3] OR (ans[3] + 1) = 7 的最小 ans[3]3 ,因为 3 OR (3 + 1) = 7

示例 2:
**输入:**nums = 11,13,31

输出:9,12,15

解释:

  • 对于 i = 0 ,满足 ans[0] OR (ans[0] + 1) = 11 的最小 ans[0]9 ,因为 9 OR (9 + 1) = 11
  • 对于 i = 1 ,满足 ans[1] OR (ans[1] + 1) = 13 的最小 ans[1]12 ,因为 12 OR (12 + 1) = 13
  • 对于 i = 2 ,满足 ans[2] OR (ans[2] + 1) = 31 的最小 ans[2]15 ,因为 15 OR (15 + 1) = 31

提示:

  • 1 <= nums.length <= 100
  • 2 <= nums[i] <= 1000
  • nums[i] 是一个质数。

解题方法:模拟

今天就每个数 O ( 1 ) O(1) O(1)的话,明天的每日一题就没得做了。

对于一个数 n n n,如何求得其对应的最小 a n s ans ans?

使用一个变量从 0 0 0试到 n − 1 n-1 n−1就好了。

每个数都这样试试,也不用优化,今日的每日一题就这样结束了。

  • 时间复杂度 O ( l e n ( n u m s ) × max ⁡ ( n u m s ) ) O(len(nums)\times\max(nums)) O(len(nums)×max(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1),力扣返回值不计入算法空间复杂度

AC代码

C++
cpp 复制代码
/*
 * @LastEditTime: 2026-01-20 22:52:17
 */
class Solution {
private:
    int get(int n) {
        for (int i = 0; i <= n; i++) {
            if ((i | (i + 1)) == n) {
                return i;
            }
        }
        return -1;
    }
public:
    vector<int> minBitwiseArray(vector<int>& nums) {
        vector<int> ans(nums.size());
        for (int i = 0; i < nums.size(); i++) {
            ans[i] = get(nums[i]);
        }
        return ans;
    }
};
Python
python 复制代码
'''
LastEditTime: 2026-01-20 22:55:49
'''
from typing import List

class Solution:
    def get(self, n: int) -> int:
        for i in range(n):
            if (i | (i + 1)) == n:  # 不是(i or (i + 1))
                return i
        return -1
    
    def minBitwiseArray(self, nums: List[int]) -> List[int]:
        return [self.get(t) for t in nums]
Java
java 复制代码
/*
 * @LastEditTime: 2026-01-20 23:04:56
 */
import java.util.List;

class Solution {
    private int get(int n) {
        for (int i = 0; i < n; i++) {
            if ((i | (i + 1)) == n) {
                return i;
            }
        }
        return -1;
    }

    public int[] minBitwiseArray(List<Integer> nums) {
        int[] ans = new int[nums.size()];  // 是size不是length
        for (int i = 0; i < nums.size(); i++) {
            ans[i] = get(nums.get(i));
        }
        return ans;
    }
}
Go
go 复制代码
/*
 * @LastEditTime: 2026-01-20 22:58:16
 */
package main

func minBitwiseArray(nums []int) []int {
    get := func(n int) int {
        for i := 0; i < n; i++ {
            if (i | (i + 1)) == n {
                return i
            }
        }
        return -1
    }
    ans := make([]int, len(nums))
    for i, n := range nums {
        ans[i] = get(n)
    }
    return ans
}
Rust
rust 复制代码
/*
 * @LastEditTime: 2026-01-20 23:07:14
 */
impl Solution {
    fn get(n: i32) -> i32 {
        for i in 0..n {
            if (i | (i + 1)) == n {
                return i;
            }
        }
        -1
    }

    pub fn min_bitwise_array(nums: Vec<i32>) -> Vec<i32> {
        nums.iter().map(|&num| Self::get(num)).collect()
    }
}
Rust - 压缩版(bushi)
rust 复制代码
/*
 * @LastEditTime: 2026-01-20 23:09:46
 */
impl Solution {
    pub fn min_bitwise_array(nums: Vec<i32>) -> Vec<i32> {
        nums.iter()
            .map(|&n| {
                for i in 0..n {
                    if (i | (i + 1)) == n {
                        return i;
                    }
                }
                -1
            })
            .collect()
    }
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
江畔柳前堤8 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore9 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考10 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX11 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面12 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号12 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽12 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI12 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者14 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者14 小时前
【征程6】校准量化中HistogramObserver解析
算法