题目:
题解:
使用灵神教的logTrick方法。
logTrick方法可以在O( nlog v )的时间复杂度内得到所有子数组按位and 或者 or的结果。
代码:
int minimumDifference(vector<int>& nums, int k) {
int ans=0x3f3f3f3f;
for(int i=0,I=nums.size();i<I;i++){
ans=min(ans,abs(nums[i]-k));
for(int j=i-1;j>=0;j--){
if(nums[j]==(nums[j]|nums[i]))break;
nums[j]=nums[j]|nums[i];
ans=min(ans,abs(k-nums[j]));
}
}
return ans;
}