【Lintcode】1562. Number of Restaurants
題目地址:
https://www.lintcode.com/problem/number-of-restaurants/description
給定一個長 l l l的列表,裡面含的是各個餐館的座標。顧客的座標是 ( 0 , 0 ) (0,0) (0,0),給定一個正整數 n n n,先尋找離顧客最近的 n n n個餐館,設這 n n n個餐館離顧客的最遠距離是 d d d,再按照列表原來的順序找到前 n n n個距離小於等於 d d d的餐館座標,將這些座標返回。如果不足 n n n個則返回空列表。這裡的距離取歐幾里得距離。
先將原列表深拷貝一份,然後對新列表排序,找到第 n n n個餐館與顧客的距離 d d d,然後再遍歷原列表,找到前 n n n個距離也小於等於 d d d的餐館座標即可。程式碼如下:
import java.util.ArrayList;
import java.util.List;
public class Solution {
/**
* @param restaurant:
* @param n:
* @return: nothing
*/
public List<List<Integer>> nearestRestaurant(List<List<Integer>> restaurant, int n) {
// Write your code here
if (restaurant.size() == n) {
return restaurant;
}
if (restaurant.size() < n) {
return new ArrayList<>();
}
List<List<Integer>> res = new ArrayList<>(restaurant);
res.sort((r1, r2) -> Integer.compare(disSqr(r1), disSqr(r2)));
List<Integer> farthest = res.get(n - 1);
int farDisSqr = disSqr(farthest);
List<List<Integer>> list = new ArrayList<>();
for (List<Integer> rest : restaurant) {
if (disSqr(rest) <= farDisSqr) {
list.add(rest);
}
if (list.size() == n) {
break;
}
}
return list;
}
private int disSqr(List<Integer> rest) {
int x = rest.get(0), y = rest.get(1);
return x * x + y * y;
}
}
時間複雜度 O ( l log l ) O(l\log l) O(llogl),空間 O ( l ) O(l) O(l)。
相關文章
- LintCode-Majority Number
- LintCode-Majority Number II
- LintCode-Majority Number III
- 【Lintcode】1665. Calculate Number
- LintCode-Kth Prime Number.
- 【Lintcode】1218. Number Complement
- JavaScript Number()JavaScript
- [LintCode] Daily TemperaturesAI
- LintCode 子樹
- LintCode-Backpack
- LintCode-HeapifyAPI
- Oracle System Change Number (SCN) Number 完全筆記Oracle筆記
- 【NUMBER】Oracle的NUMBER資料型別特點Oracle資料型別
- [LintCode] Permutation in String
- LintCode 主元素 II
- LintCode 解碼方法
- LintCode-Search for a Range
- LintCode-K Sum
- LintCode-Word SegmentationSegmentation
- LintCode-Hash FunctionFunction
- LintCode-Fast PowerAST
- Lintcode-Max Tree
- LintCode-Partition Array
- LintCode-Subarray Sum
- LintCode-A+B Problem
- LintCode-BackPack II
- LintCode-Previous Permuation
- LintCode 字串比較字串
- JavaScript Number 物件JavaScript物件
- Number.NaNNaN
- Number of BoomerangsOOM
- [LintCode] 3Sum Smaller
- 【Lintcode】572. Music PairsAI
- 【Lintcode】576. Split Array
- 【Lintcode】1736. Throw Garbage
- LintCode - A + B 問題(普通)
- Lintcode 反轉整數
- 表示式展開-LintCode