贴一下灵神的题解里面的解释~
就是一种优化策略,logtrick
class Solution {
public:
int minimumDifference(vector& nums, int k) {
int res = 0x3f3f3f3f;
int n = nums.size();
for(int i=0;i=0&&(nums[j]|nums[i])!=nums[j];--j){
nums[j] |= nums[i];
res = min(res,abs(nums[j]-k));
}
}
return res;
};
};
同理换成AND的话就是看当前元素是不是前面的超集就好了
class Solution {
public:
int closestToTarget(vector& arr, int target) {
int n = arr.size();
int res = 0x3f3f3f3f;
for(int i=0;i=0&&(arr[j]&arr[i])!=arr[j];--j){
arr[j]&=arr[i];
res = min(res,abs(target-arr[j]));
}
}
return res;
}
};