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]
        }
    }
  • 相关阅读:
    RabbitMq 集群配置
    获取 input 单选框和多选框的值
    js 获取 通过 ”?“ 或者 ”&“ url 传过来参数值
    Java 对文件的读取操作
    java 链接jdbc
    了解EBP寄存器
    节后后遗症
    [转]web service实现原理与异步调用
    Javascript实现无刷新分页
    邮件发送
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/15743369.html
Copyright © 2011-2022 走看看