LeetCode Daily challenge - K Closest Points to Origin

題目大意

找前K小元素,只不過元素是二維的座標

思路

很容易想到排序後取前K個,雖然可以但是速度不夠快。實際上類似於找第K大(小),可以用劃分的方法找,每次隨機劃分,然後判斷接下來從哪兒一邊找。

STL中有partial_sortnth_element,盡情AC吧。。。。。

代碼

第二種方法的代碼。

class Solution {
public:
    vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
        
        nth_element(points.begin(), points.begin() + K - 1, points.end(), [](vector<int>& p, vector<int>& q) {
            return p[0] * p[0] + p[1] * p[1] < q[0] * q[0] + q[1] * q[1];
        });
        return vector<vector<int>>(points.begin(), points.begin() + K);
    }
};

總結

除非練習,否則能用庫就別手寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章