LeetCode-1637. 两点之间不包含任何点的最宽垂直面积

给你 n 个二维平面上的点 points ,其中 points[i] = [xi, yi] ,请你返回两点之间内部不包含任何点的 最宽垂直面积 的宽度。

垂直面积 的定义是固定宽度,而 y 轴上无限延伸的一块区域(也就是高度为无穷大)。 最宽垂直面积 为宽度最大的一个垂直面积。

请注意,垂直区域 边上 的点 不在 区域内。

 

示例 1:


输入:points = [[8,7],[9,9],[7,4],[9,7]]
输出:1
解释:红色区域和蓝色区域都是最优区域。
示例 2:

输入:points = [[3,1],[9,0],[1,0],[1,4],[5,3],[8,8]]
输出:3

 

只用将x的坐标排序算最大差值即可。

写了个简单的归并排序(没有优化):

#include 
#include 
using namespace std;
class Solution {
public:
	int maxWidthOfVerticalArea(vector>& points) {
		vector arr;
		vector res;
		for (int i = 0; i < points.size(); i++) {
			arr.push_back(points[i][0]);
		}
		res = mergesort(arr, 0, arr.size() - 1);

		for (int i = 1; i < res.size(); i++) {
			getMaxWide(res[i], res[i - 1]);
		}

		return maxVal;
	}
	
	void getMaxWide(int a, int b) {
		if ((a - b) > maxVal) {
			maxVal = a - b;
		}
	}


public:
	vector merge(vector& A, vector& B) {
		vector arr(A.size() + B.size(), 0);
		int index1 = 0;
		int index2 = 0;
		while (index1 < A.size() && index2 < B.size()) {
			if (A[index1] < B[index2]) {
				arr[index1 + index2] = A[index1];
				index1++;
			}
			else {
				arr[index1 + index2] = B[index2];
				index2++;
			}
		}
		while (index1 < A.size()) {
			arr[index1 + index2] = A[index1];
			index1++;
		}
		while (index2 < B.size()) {
			arr[index1 + index2] = B[index2];
			index2++;
		}
		return arr;
	}

	vector mergesort(vector& arr, int start, int end) {
		if (start == end) {
			vector val(1, 0);
			val[0] = arr[start];
			return val;
		}
		int mid = (start + end) / 2;

		vectorLeft = mergesort(arr, start, mid);
		vectorRight = mergesort(arr, mid + 1, end);

		return merge(Left, Right);
	}

private:
	int maxVal;

};

int main() {
	vector> points = { {3,1 }, { 9,0 }, { 1,0 }, { 1,4 }, { 5,3 }, { 8,8 } };
	vector val = { 9,10,2,3,1,34,12,43,6,2,5 };
	Solution* ps = new Solution();
	vectorres = ps->mergesort(val, 0, val.size() - 1);
	for (int i = 0; i < res.size(); i++) {
		cout << res[i] << endl;
	}

	cout << ps->maxWidthOfVerticalArea(points) << endl;

	return 0;
}

 

 

 

你可能感兴趣的:(算法,C++,LeetCode,leetcode,c++,排序)