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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
小欣加油2 小时前
leetcode56 合并区间
c++·算法·leetcode·职场和发展
lqqjuly2 小时前
前沿算法深度解析(二)
人工智能·算法·机器学习
徐小夕3 小时前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
akunkuntaimei4 小时前
2026年高考数学各省真题及答案(完整版)
算法·高考
Hello:CodeWorld4 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法
8Qi85 小时前
LeetCode 516:最长回文子序列
算法·leetcode·职场和发展·动态规划
youngerwang7 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
KaMeidebaby7 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
手写码匠8 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
无限码力8 小时前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试