int smallestDistancePair(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
int lo = 0, hi = nums.back() - nums.front(), mid;
while(lo<hi) {
mid = (lo + hi)/2;
// count number of distances that is <= mid;
int cnt = countDist(nums, mid);
if(cnt >= k) hi = mid;
else lo = mid + 1;
}
return lo;
}
int countDist(vector<int>& n, int dist) {
int i = 0, j = 0, cnt = 0;
for(; i < n.size(); i++) {
while(j<n.size() && n[j] - n[i] <= dist) j++;
cnt += j - i -1;
}
return cnt;
}
Showing posts with label SpecialBinarySearch. Show all posts
Showing posts with label SpecialBinarySearch. Show all posts
Sunday, October 29, 2017
Friday, October 20, 2017
378. Kth Smallest Element in a Sorted Matrix
https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/description/
int kthSmallest(vector<vector<int>>& matrix, int k) {
int NI = matrix.size(), NJ = matrix[0].size();
int lo = matrix[0][0], hi = matrix[NI-1][NJ-1];
while(lo<hi) {
int mid = lo + (hi - lo) / 2;
int cnt = 0;
for(int i=0; i<NI; i++)
cnt += upper_bound(matrix[i].begin(), matrix[i].end(), mid)
- matrix[i].begin();
if(cnt < k) lo = mid+1;
else hi = mid;
}
return lo;
}
int kthSmallest(vector<vector<int>>& matrix, int k) {
int NI = matrix.size(), NJ = matrix[0].size();
int lo = matrix[0][0], hi = matrix[NI-1][NJ-1];
while(lo<hi) {
int mid = lo + (hi - lo) / 2;
int cnt = 0;
for(int i=0; i<NI; i++)
cnt += upper_bound(matrix[i].begin(), matrix[i].end(), mid)
- matrix[i].begin();
if(cnt < k) lo = mid+1;
else hi = mid;
}
return lo;
}
Subscribe to:
Posts (Atom)