巫山那家做网站,工作室有专门的网站,网站建设公司杭州18年,做网站能挣钱么3171. 找到按位或最接近 K 的子数组
给你一个数组 nums 和一个整数 k 。你需要找到 nums 的一个 子数组 #xff0c;满足子数组中所有元素按位或运算 OR 的值与 k 的 绝对差 尽可能 小 。换言之#xff0c;你需要选择一个子数组 nums[l..r] 满足 |k - (nums[l] OR nums[l 1…3171. 找到按位或最接近 K 的子数组
给你一个数组 nums 和一个整数 k 。你需要找到 nums 的一个 子数组 满足子数组中所有元素按位或运算 OR 的值与 k 的 绝对差 尽可能 小 。换言之你需要选择一个子数组 nums[l..r] 满足 |k - (nums[l] OR nums[l 1] ... OR nums[r])| 最小。
请你返回 最小 的绝对差值。
子数组 是数组中连续的 非空 元素序列。
数据范围
1 nums.length 1051 nums[i] 1091 k 109
分析
参考灵神的解析
代码
typedef long long LL;
class Solution {
public:const static LL INF INT_MAX, N 1e5 5;LL minimumDifference(vectorint nums, LL k) {LL res INF;int n nums.size();for(int i 0; i n; i ) {res min(res, abs(k - nums[i]));for(int j i - 1; j 0; j -- ) {if((nums[j] | nums[i]) nums[j]) break;nums[j] | nums[i];res min(res, abs(k - nums[j]));}}return res;}
};