最近感觉写的都没啥好记录的,感觉博客空了好久,还是记录一下吧,看他们说要坚持一段时间学一个方面的,才能学好。那就从感觉最简单的二分开始吧。
给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。 「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d 。 输入:arr1 = [4,5,8], arr2 = [10,9,1,8], d = 2 输出:2
思路 因为这个是二分板块的,,所以很自然想到要用二分,显然是找和arr1[i]最近的那个数,来判断距离。那就把数组二排序,然后进行二分查找。我找到的是第一个比arr1[i]大的数,为了保证数据正确,我还需要比较这个数的前一个数,即小于或等于arr1[i]的第一个数
class Solution {
public:
int findTheDistanceValue(vector<int>& arr1, vector<int>& arr2, int d) {
sort(arr2.begin(),arr2.end());
int count=0;
for(int i=0;i<arr1.size();++i)
{
int start=0,end=arr2.size()-1;
while(start<end)
{
int mid=start+(end-start)/2;
if(arr2[mid]>=arr1[i])
{
end=mid;
}else
{
start=mid+1;
}
}
if(start!=0)
{
if(abs(arr2[start]-arr1[i])>d&&abs(arr2[start-1]-arr1[i])>d)
{
count++;
}
}else if(abs(arr2[start]-arr1[i])>d)
{
count++;
}
}
return count;
}
};
|