本文主要是介绍Leetcode 3022. Minimize OR of Remaining Elements Using Operations,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- Leetcode 3022. Minimize OR of Remaining Elements Using Operations
- 1. 解题思路
- 2. 代码实现
- 题目链接:3022. Minimize OR of Remaining Elements Using Operations
1. 解题思路
这道题坦率地说其实不太想写这篇题解,因为其实自己根本没有搞定,甚至说看了大佬的解答也没有搞定,就真的不应该写的,不过整体上的思路其实倒是想到的,和大佬们的思路如出一辙,所以还是决定写写,把我自己的理解和有问题的地方说说,然后摘录一下大佬们的code,如果有人可以理解的话,请务必在评论区解释一下,万分感谢。
这道题思路的话整体上来说就是按位进行考察,从最高位到最低位,看看在不超过k次操作的前提下可以确保哪几个位上的数字被清零。
而对应的情况,就是假设我们考察第n位,只需要考察有多少个数在第n位上为1,那么我们就至少需要n次操作才能确保留下的数当中第 n n n为0。
当然,不同的位在消除的过程当中会有重合,这个倒也不是什么大问题。
唯一的问题是,要消除这些数,如果他们不连续的情况下会引入其他的数,这样的情况下会导致另一些位上受到干扰,这个干扰的情况我一直没有想的很明白,看大佬们的代码也没有看明白他们是怎么操作的,就很不爽……
2. 代码实现
给出大佬的python代码实现如下:
class Solution:def minOrAfterOperations(self, nums: List[int], k: int) -> int:mask = 0for i in range(29, -1, -1):mask |= 1 << icnt = 0carry = 0for x in nums:if carry != 0:carry = carry & x & maskcnt += 1else:carry = x & maskif carry != 0:cnt += 1if cnt > k or cnt == len(nums):mask ^= 1 << ireturn ((1 << 30) - 1) ^ mask
又能够看明白其中carry的含义的大佬请务必在评论区指导一下,真心看晕了,万分感谢!!!
这篇关于Leetcode 3022. Minimize OR of Remaining Elements Using Operations的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!