leetcode oj java Number of Boomerangs
2016-11-20 15:27
459 查看
一、问题描述:
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of points
the distance between
order of the tuple matters).
Find the number of boomerangs. You may assume that n will be at most 500 and coordinates of points are all in the range [-10000, 10000](inclusive).
Example:
二、解决思路:
针对每个点遍历,找到与它距离相同的若干点的集合,针对集合的size做算术运算即可。 例如与点a距离相同的点有b c d e, 那么此时应该有4*3/2*2=12对boomerangs.
三、代码:public class Solution {
public double comDis(int[] n1, int[] n2) {
return (n1[0] - n2[0]) * (n1[0] - n2[0]) + (n1[1] - n2[1]) * (n1[1] - n2[1]);
}
public int numberOfBoomerangs(int[][] points) {
int np = points.length;
if (np<3){
return 0;
}
double[] dis = new double[np];
int sum = 0;
int[] base = new int[2];
HashMap<Double, Integer> map = new HashMap<Double, Integer>();
for (int j = 0; j < np; j++) {
base = points[j];
map.clear();
for (int i = 0; i < np; i++) {
dis[i] = comDis(base, points[i]);
if (map.containsKey(dis[i])) {
map.put(dis[i], map.get(dis[i]) + 1);
} else {
map.put(dis[i], 1);
}
}
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
double key = (double) it.next();
int num = map.get(key);
sum += (num) * (num - 1);
}
}
return sum;
}
}
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of points
(i, j, k)such that the distance between
iand
jequals
the distance between
iand
k(the
order of the tuple matters).
Find the number of boomerangs. You may assume that n will be at most 500 and coordinates of points are all in the range [-10000, 10000](inclusive).
Example:
Input: [[0,0],[1,0],[2,0]] Output: 2 Explanation: The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]
二、解决思路:
针对每个点遍历,找到与它距离相同的若干点的集合,针对集合的size做算术运算即可。 例如与点a距离相同的点有b c d e, 那么此时应该有4*3/2*2=12对boomerangs.
三、代码:public class Solution {
public double comDis(int[] n1, int[] n2) {
return (n1[0] - n2[0]) * (n1[0] - n2[0]) + (n1[1] - n2[1]) * (n1[1] - n2[1]);
}
public int numberOfBoomerangs(int[][] points) {
int np = points.length;
if (np<3){
return 0;
}
double[] dis = new double[np];
int sum = 0;
int[] base = new int[2];
HashMap<Double, Integer> map = new HashMap<Double, Integer>();
for (int j = 0; j < np; j++) {
base = points[j];
map.clear();
for (int i = 0; i < np; i++) {
dis[i] = comDis(base, points[i]);
if (map.containsKey(dis[i])) {
map.put(dis[i], map.get(dis[i]) + 1);
} else {
map.put(dis[i], 1);
}
}
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
double key = (double) it.next();
int num = map.get(key);
sum += (num) * (num - 1);
}
}
return sum;
}
}
相关文章推荐
- leetcode oj java Number of Segments in a String
- [LeetCode][Java] Letter Combinations of a Phone Number
- [leetcode-200]Number of Islands(java)
- [LeetCode]447 Number of Boomerangs
- 【LeetCode】Number of Boomerangs 解题报告
- Leetcode Number of Boomerangs 447
- [Java]LeetCode17 Letter Combinations of a Phone Number
- LEETCODE 17 Letter Combinations of a Phone Number (JAVA题解)
- leetcode oj java Third Maximum Number
- (Java)LeetCode-17. Letter Combinations of a Phone Number
- Leetcode Number of Boomerangs
- Java [leetcode 17]Letter Combinations of a Phone Number
- LeetCode_OJ【17】Letter Combinations of a Phone Number
- Leetcode-200(Java) Number of Islands
- LeetCode Number of Boomerangs
- LeetCode OJ Number of 1 Bits
- LeetCode 17 Letter Combinations of a Phone Number(C,C++,Java,Python)
- LeetCode OJ Number of Islands
- 【小熊刷题】Letter Combinations of a Phone Number <Leetcode 17, Java>
- LeetCode434 Number of Segments in a String java and python solution