zoukankan      html  css  js  c++  java
  • 973. K Closest Points to Origin

    /**
    973. K Closest Points to Origin
    https://leetcode.com/problems/k-closest-points-to-origin/
    Given an array of points where points[i] = [xi, yi] represents a point on the X-Y plane and an integer k, return the k closest points to the origin (0, 0).
    The distance between two points on the X-Y plane is the Euclidean distance (i.e., √(x1 - x2)2 + (y1 - y2)2).
    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]]
    Explanation: The answer [[-2,4],[3,3]] would also be accepted.
    
    Constraints:
    1. 1 <= k <= points.length <= 104
    2. -104 < xi, yi < 104
    */
    use std::collections::BinaryHeap;
    
    pub struct Solution {}
    
    impl Solution {
        /*
        Solution: Priority Queue, Time:O(nlog(k)), Space:O(k)
        */
        pub fn k_closest(points: Vec<Vec<i32>>, k: i32) -> Vec<Vec<i32>> {
            //default is max heap
            let mut heap: BinaryHeap<(i32, Vec<i32>)> = BinaryHeap::new();
            for point in points {
                let dist = Self::distance(&point);
                heap.push((dist, point));//O(1)
                if heap.len() > k as usize {
                    heap.pop();//remove the top which is the maximum, O(log(n))
                }
            }
            let mut result:Vec<Vec<i32>> = Vec::new();
            while let Some((dist,array)) = heap.pop() {
                result.push(array)
            }
            result
        }
    
        fn distance(array: &Vec<i32>) -> i32 {
            array[0] * array[0] + array[1] * array[1]
        }
    }
  • 相关阅读:
    Node.js+express 4.x 入门笔记
    排序系列 之 堆排序算法 —— Java实现
    排序系列 之 归并排序算法 —— Java实现
    javascript必须知道的知识要点(二)
    XGBoost安装
    ubuntu16.04查看哪些软件可更新
    禁止ubuntu更新内核
    ubuntu安装nvidia显卡驱动问题
    禁用ubuntu16.04的guest账户
    远程登录jupyter notebook
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/15743369.html
Copyright © 2011-2022 走看看