LeetCode每日一題--973. 最接近原點的 K 個點

七七不是七七七七發表於2020-11-09

題目:跳轉至 973. 最接近原點的 K 個點
我們有一個由平面上的點組成的列表 points。需要從中找出 K 個距離原點 (0, 0) 最近的點。
(這裡,平面上兩點之間的距離是歐幾里德距離。)
你可以按任何順序返回答案。除了點座標的順序之外,答案確保是唯一的。
示例 1:
輸入:points = [[1,3],[-2,2]], K = 1
輸出:[[-2,2]]
解釋:
(1, 3) 和原點之間的距離為 sqrt(10),
(-2, 2) 和原點之間的距離為 sqrt(8),
由於 sqrt(8) < sqrt(10),(-2, 2) 離原點更近。
我們只需要距離原點最近的 K = 1 個點,所以答案就是 [[-2,2]]。

class Solution {
public:
    vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {

    }
};

思路:
很明顯的排序問題,第一反應挨個遍歷,每次計算兩個數的平方和,取其中K個最小值。

class Solution {
public:
    vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
        vector<vector<int>> res(K,vector<int>());
        vector<long> length(K,0);
        int len=points.size();
        if(len==0)
            return res;
        int count=0;
        for(int i=0;i<len;++i){
            vector<int> temp(2);
            temp[0]=points[i][0];
            temp[1]=points[i][1];
            long psquare=pow(points[i][0],2)+pow(points[i][1],2);
            if(res.empty() || i<K){
                res[count]=temp;
                length[count++]=psquare;
            }
            else{
                auto maxlength=max_element(length.begin(),length.end());
                long maxvalue=length[maxlength-length.begin()];
                if(maxvalue>psquare){
                    res[maxlength-length.begin()]=temp;
                    length[maxlength-length.begin()]=psquare;
                }
            }
        }
        return res;
    }
};

今天的中等題那麼簡單呢,暴力解決,開開心心通過測試用例,懷抱著一絲不安點選提交,果然超時了。
再一看題解,寥寥幾行,還挺熟悉,這不是前天剛用過的sort嗎。如何學到下次就能用到是一個永恆的課題。

class Solution {
public:
    vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
        sort(points.begin(),points.end(),[this](vector<int> x,vector<int> y){
            return x[0]*x[0]+x[1]*x[1]<y[0]*y[0]+y[1]*y[1];
        });
        vector<vector<int>> res(points.begin(),points.begin()+K);
        return res;
    }
};

相關文章