博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 447. Number of Boomerangs JAVA语言
阅读量:6422 次
发布时间:2019-06-23

本文共 2426 字,大约阅读时间需要 8 分钟。

1
2
3
4
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 j equals the distance between i and 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:2Explanation:The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]

题意:给出n个点的坐标,找到ijk三个点,使得i到j和k的距离相等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
public 
class 
Solution {
    
public 
int 
numberOfBoomerangs(
int
[][] points) {
        
还有负数。。。。。hehe....坐标轴。。。。并不是只有x轴
        
// int length=points.length;
        
// int m;
        
// int count=0;
        
// for(int i=0;i<length;i++){
        
//     m=1;
        
//     while(i+m<=length-1 && i-m>=0){
        
//         if(points[i][0]-points[i-m][0]==points[i+m][0]-points[i][0]){
        
//             count=count+2;
        
//         }
        
//         m++;
        
//     }
        
// }
        
// // System.out.println(length);
        
// return count;
        
//http://blog.csdn.net/MebiuW/article/details/53096120
        
//  int length=points.length;
        
//  int count=0;
        
//  for(int i=0;i<length;i++){
        
//      HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
        
//      for(int j=0;j<length;j++){
        
//          int dist=(points[i][0]-points[j][0])*(points[i][0]-points[j][0])+(points[i][1]-points[j][1])*(points[i][1]-points[j][1]);
        
//          if(!map.containsKey(dist)){
        
//              map.put(dist,0);
        
//          }
        
//          count+=map.get(dist)*2;
        
//          map.put(dist,map.get(dist)+1);
        
//      }
        
//  }
        
//  return count;
        
//也是遍历,求与其距离相同的点的个数,最后就是个数(个数-1)
        
///感觉还是这个好理解一些~
        
int 
length=points.length;
        
int 
count=
0
;
        
int 
dist=
0
;
        
for
(
int 
i=
0
;i<length;i++){
            
HashMap<Integer,Integer> map=
new 
HashMap<Integer,Integer>();
            
for
(
int 
j=
0
;j<length;j++){
                
if
(i==j){
                    
continue
;
                
}
else
{
                    
dist=(points[i][
0
]-points[j][
0
])*(points[i][
0
]-points[j][
0
])+(points[i][
1
]-points[j][
1
])*(points[i][
1
]-points[j][
1
]);
                    
if
(!map.containsKey(dist)){
                        
map.put(dist,
1
);
                    
}
else
{
                        
map.put(dist,map.get(dist)+
1
);    
                    
}
                
}
                 
            
}
        
Iterator it = map.keySet().iterator();  
        
while
(it.hasNext()) {  
            
int 
key = (
int
)it.next();  
            
count+=map.get(key)*(map.get(key)-
1
);
            
// System.out.println("value:" + hashMap.get(key));  
            
        
}
        
return 
count;
    
}
}

PS:第一次以为只有x轴正半轴,然后才发现其实是x,y轴4个空间。

最后的思想是遍历所有点,找到所有点距其距离相等的点的个数n,那么就有n(n-1)个,不断累加即可。

本文转自 努力的C 51CTO博客,原文链接:http://blog.51cto.com/fulin0532/1891285

你可能感兴趣的文章
要命啦!Word中快速录入大全,内含快捷键小技巧,快来一起学习!
查看>>
javascript实现音频mp3播放
查看>>
html5-离线缓存
查看>>
linux系统安装完后的常见工作
查看>>
在Linux服务器、客户端中构建密钥对验证进行远程连接
查看>>
揪出MySQL磁盘消耗迅猛的真凶
查看>>
和“C”的再遇
查看>>
一键安装kubernetes 1.13.0 集群
查看>>
RabbitMq的集群搭建
查看>>
spring boot + mybatis 同时访问多数据源
查看>>
URL中汉字转码
查看>>
[转]go正则实例
查看>>
Selector中关于顺序的注意事项
查看>>
小黑小波比.清空<div>标签内容
查看>>
Java中的ExceptionInInitializerError异常及解决方法
查看>>
Spring 注入bean时的初始化和销毁操作
查看>>
java线程同步原理(lock,synchronized)
查看>>
MyEclipse中使用Hql编辑器找不到Hibernate.cfg.xml文件解决方法
查看>>
yRadio以及其它
查看>>
第四节 对象和类
查看>>