K Closest Points to Origin using Custom Sorting Algorithm in C++
- 时间:2020-09-09 13:08:38
- 分类:网络文摘
- 阅读:84 次
We have a list of points on the plane. Find the K closest points to the origin (0, 0). (Here, the distance between two points on a plane is the Euclidean distance.) You may return the answer in any order. The answer is guaranteed to be unique (except for the order that it is in.)
Example 1:
Input: points = [[1,3],[-2,2]], K = 1
Output: [[-2,2]]Explanation:
The distance between (1, 3) and the origin is sqrt(10).
The distance between (-2, 2) and the origin is sqrt(8).
Since sqrt(8) < sqrt(10), (-2, 2) is closer to the origin. We only want the closest K = 1 points from the origin, so the answer is just [[-2,2]]. Example 2: Input: points = [[3,3],[5,-1],[-2,4]], K = 2 Output: [[3,3],[-2,4]] (The answer [[-2,4],[3,3]] would also be accepted.)
In K Closest Points to Origin Algorithm by using Priority Queues in C++/Java, we have solved the problem by using a priority queue in C++/Java. This post will focus on solving the same problem using the custom sorting algorithm.
C++ Program to Compute K Closest Points to Origin using Custom Sorting Algorithm
C++’s sort method allows a third parameter as the custom comparator.
1 2 3 4 5 6 7 8 9 10 11 | class Solution { public: vector<vector<int>> kClosest(vector<vector<int>>& points, int K) { sort(begin(points), end(points), [](auto &a, auto &b) { auto d1 = a[0] * a[0] + a[1] * a[1]; auto d2 = b[0] * b[0] + b[1] * b[1]; return d1 < d2; }); return vector(begin(points), begin(points) + K); } }; |
class Solution { public: vector<vector<int>> kClosest(vector<vector<int>>& points, int K) { sort(begin(points), end(points), [](auto &a, auto &b) { auto d1 = a[0] * a[0] + a[1] * a[1]; auto d2 = b[0] * b[0] + b[1] * b[1]; return d1 < d2; }); return vector(begin(points), begin(points) + K); } };
Then we can use the vector constructor (giving it two iterators start and finish) to return a copy of the vector.
Java Program to Compute K Closest Points to Origin using Custom Sorting Algorithm
In Java, we can use Arrays.sort method to sort the int[][] object. We can then use Arrays.copyOfRange to return a copy of the sub array (substring on Array).
1 2 3 4 5 6 7 8 9 10 | class Solution { public int[][] kClosest(int[][] points, int K) { Arrays.sort(points, (a, b) -> { int x = a[0] * a[0] + a[1] * a[1]; int y = b[0] * b[0] + b[1] * b[1]; return x - y; }); return Arrays.copyOfRange(points, 0, K); } } |
class Solution { public int[][] kClosest(int[][] points, int K) { Arrays.sort(points, (a, b) -> { int x = a[0] * a[0] + a[1] * a[1]; int y = b[0] * b[0] + b[1] * b[1]; return x - y; }); return Arrays.copyOfRange(points, 0, K); } }
Both implementations have O(N.LogN) time complexity which is what a sorting algorithm would cost nowadays.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:数学题:姐姐8年后的年龄是妹妹3年前的5倍 数学题:一个直角三角形以它的斜边为轴旋转一周 数学题:一个三角形被一个长方形挡住了 摘桃子的数学题 如图平行四边形ABCD的周长为72厘米 每个人都和其他人握了一次手 客车和货车同时从甲、乙两地的中点反向行驶 数学题:把一个圆锥沿着高切开,得到了个如下图所示的物体 数学题:49个桶,32个扁担,问有几个人挑水,几个人抬水? 学校合唱队有205名学生如果女同学减少25人
- 评论列表
-
- 添加评论