力扣2680题解

记录

2025.5.9

题目:

思路:

1.计算初始或值:首先计算数组中所有元素的按位或结果 allOr,这表示在不进行任何左移操作时数组的或值。

2.计算固定或值:在计算 allOr 的同时,计算一个 fixed 值,这个值表示在左移某个元素时,其他元素的或结果。具体来说,fixed 是 allOr 与当前元素的与操作的结果的累积或。

3.尝试左移每个元素:对于数组中的每一个元素,将其左移 k 位后,计算新的或值。新的或值由三部分组成:

allOr ^ x:表示除了当前元素外其他元素的或结果。

fixed:表示在左移当前元素时其他元素的固定或部分。

x << k:当前元素左移 k 位后的值。

4.取最大值:在所有可能的左移操作中,选择最大的或值作为结果。

解题步骤:

1.初始化变量:allOr 初始化为0,用于累积所有元素的或结果;fixed 初始化为0,用于累积固定或部分。

2.计算 allOr 和 fixed:遍历数组,更新 fixed 为 fixed | (allOr & x),即当前元素与之前所有元素的或结果的与操作再或上之前的 fixed;更新 allOr 为 allOr | x,即累积或操作。

3.计算最大或值:再次遍历数组,对于每个元素 x,计算左移 k 位后的新或值。新或值由三部分组合而成:

allOr ^ x:排除当前元素后的或结果。

fixed:固定或部分。

x << k:当前元素左移 k 位后的值。

4.返回结果:在所有可能的左移操作中,取最大的或值作为最终结果。

代码:

java 复制代码
class Solution {
    public long maximumOr(int[] nums, int k) {
        int allOr = 0;
        int fixed = 0;
        for (int x : nums) {
            fixed |= allOr & x; 
            allOr |= x; 
        }

        long ans = 0;
        for (int x : nums) {
            ans = Math.max(ans, (allOr ^ x) | fixed | ((long) x << k));
        }
        return ans;
    }
}

复杂度:

O(N)

O(1)

相关推荐
A尘埃1 小时前
超市购物篮关联分析与货架优化(Apriori算法)
算法
.小墨迹1 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
不穿格子的程序员1 小时前
从零开始刷算法——贪心篇1:跳跃游戏1 + 跳跃游戏2
算法·游戏·贪心
大江东去浪淘尽千古风流人物1 小时前
【SLAM新范式】几何主导=》几何+学习+语义+高效表示的融合
深度学习·算法·slam
hqyjzsb1 小时前
盲目用AI提效?当心陷入“工具奴”陷阱,效率不增反降
人工智能·学习·职场和发展·创业创新·学习方法·业界资讯·远程工作
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之列表(List)Python2026新版
数据结构·leetcode·list
重生之我是Java开发战士1 小时前
【优选算法】模拟算法:替换所有的问号,提莫攻击,N字形变换,外观数列,数青蛙
算法
仟濹2 小时前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
yang)2 小时前
欠采样时的相位倒置问题
算法
历程里程碑2 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法