leetcode力扣刷题系列——【找到按位或最接近 K 的子数组】

题目

给你一个数组 nums 和一个整数 k 。你需要找到 nums 的一个子数组,满足子数组中所有元素按位或运算 OR 的值与 k 的 绝对差 尽可能 小 。换言之,你需要选择一个子数组 nums[l…r] 满足 |k - (nums[l] OR nums[l + 1] … OR nums[r])| 最小。
请你返回 最小 的绝对差值。
子数组是数组中连续的 非空 元素序列。

示例 1
输入:
nums = [1,2,4,5], k = 3
输出
0
解释:
子数组 nums[0…1] 的按位 OR 运算值为 3 ,得到最小差值 |3 - 3| = 0 。

示例 2:

输入:
nums = [1,3,1,3], k = 2
输出:
1
解释:
子数组 nums[1…1] 的按位 OR 运算值为 3 ,得到最小差值 |3 - 2| = 1 。

示例 3:
输入:
nums = [1], k = 10

输出:
9
解释:
只有一个子数组,按位 OR 运算值为 1 ,得到最小差值 |10 - 1| = 9 。

提示:
1 <= nums.length <= 105
1 <= nums[i] <= 109
1 <= k <= 109

答案

我的方法
方法有问题,这道题在力扣中属于难题,对我而言也不简单,我就是简单的先找到所有的子列表,再找到所有的or值,在进行绝对值的运算,这样子确实简单易懂,但是一旦nums足够大,我们的程序就会超出内存大小。
今天也是没有完成今天的题目,还是因为我太菜啦,想不到更牛的方法,所以今天还是分享一下官方大大的解题思路和方法吧。

class Solution(object):
    def minimumDifference(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        # 获取数组中所有子数组的值
        subnums=[]
        result 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火眼猊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值