Leetcode 447. Number of Boomerangs JAVA语言

简介:
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

相关文章
|
11月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
9月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
545 18
|
9月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
397 4
|
10月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
386 15
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
501 14
|
11月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
685 0
|
11月前
|
JSON Java API
【干货满满】分享拼多多API接口到手价,用Java语言实现
本方案基于 Java 实现调用拼多多开放平台商品详情 API,通过联盟接口获取商品到手价(含拼团折扣与优惠券),包含签名生成、HTTP 请求及响应解析逻辑,适用于电商比价、导购系统集成。
|
11月前
|
JSON Java API
【干货满满】分享淘宝API接口到手价,用Java语言实现
本文介绍了如何使用 Java 调用淘宝开放平台 API 获取商品到手价,涵盖依赖配置、签名生成、HTTP 请求与响应解析等核心实现步骤。
|
12月前
|
JavaScript Java Go
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡
869 0
|
JSON JavaScript 前端开发
Python+JAVA+PHP语言,苏宁商品详情API
调用苏宁商品详情API,可通过HTTP/HTTPS发送请求并解析响应数据,支持多种编程语言,如JavaScript、Java、PHP、C#、Ruby等。核心步骤包括构造请求URL、发送GET/POST请求及解析JSON/XML响应。不同语言示例展示了如何获取商品名称与价格等信息,实际使用时请参考苏宁开放平台最新文档以确保兼容性。