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]
        }
    }
  • 相关阅读:
    TCP/IP||ARP/RARP
    TCP/IP||IP
    TCP/IP||链路层
    Struts||IQ
    SpringMVC||IQ
    TCP/IP Basic
    Spring||Mails
    Spring||Quartz
    jQuery Ajax 方法应用。
    html5的离线储存应用.
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/15743369.html
Copyright © 2011-2022 走看看