LeetCode演算法題-Number of Boomerangs(Java實現)
這是悅樂書的第231次更新,第244篇原創
01 看題和準備
今天介紹的是LeetCode演算法題中Easy級別的第98題(順位題號是447)。給定平面中的n個點都是成對不同的,“迴旋鏢”是點(i,j,k)的元組,使得i和j之間的距離等於i和k之間的距離(元組的順序很重要))。找到迴旋鏢的數量。例如:
輸入:[[0,0],[1,0],[2,0]
輸出:2
說明:兩個迴旋鏢是[[1,0],[0,0],[2,0]]和[[1,0],[2,0],[0,0]]
您可以假設n最多為500,點的座標都在[-10000,10000](含)範圍內。
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 解題
題目中迴旋鏢的意思是任意三點,只要滿足兩兩距離相等就是一個迴旋鏢。比如a點,有兩個點b和c到a的距離相等,那麼就有兩種組合,abc和acb都滿足迴旋鏢。如果是三個點到a的距離都相等,就會有六種組合,就像排列組合一樣。
我們只需要將距離相等的點記錄下來,然後帶入排列組合的公式n*(n-1)中,累加求和即可,最後的和就是全部可能的迴旋鏢。使用兩層迴圈,讓每一個點都做一次a點,去計算那些到a點距離相等的點。兩點之間距離公式(x1-x2)2+(y1-y2)2,正常應該是需要開平方的,但是題目中有說範圍,因此直接使用平方和,同時也不必擔心溢位的風險。
public int numberOfBoomerangs(int[][] points) {
int result = 0;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i=0; i<points.length; i++) {
for (int j=0; j<points.length; j++) {
if (i == j) {
continue;
}
int a = points[i][0]-points[j][0];
int b = points[i][1]-points[j][1];
map.put(a*a+b*b, map.getOrDefault(a*a+b*b, 0)+1);
}
for (int val : map.values()) {
result += val*(val-1);
}
map.clear();
}
return result;
}
03 小結
演算法專題目前已日更超過三個月,演算法題文章98+篇,公眾號對話方塊回覆【資料結構與演算法】、【演算法】、【資料結構】中的任一關鍵詞,獲取系列文章合集。
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!
相關文章
- Leetcode 447 Number of BoomerangsLeetCodeOOM
- LeetCode演算法題-Next Greater Element I(Java實現)LeetCode演算法Java
- LeetCode - 解題筆記 - 8 - Palindrome NumberLeetCode筆記
- Leetcode Number of islandsLeetCode
- LeetCode(1297):子串的最大出現次數 Maximum Number of Occurrences of a Substring(Java)LeetCodeJava
- [LeetCode] Third Maximum NumberLeetCode
- [LeetCode] Find the Duplicate NumberLeetCode
- Leetcode 9 Palindrome NumberLeetCode
- [2]十道演算法題【Java實現】演算法Java
- 演算法練習--LeetCode--17. Letter Combinations of a Phone Number: 100%演算法LeetCode
- LeetCode題目:39. 組合總和 解題思路及Java實現LeetCodeJava
- Leetcode 933 Number of Recent CallsLeetCode
- [LeetCode] 9. Palindrome NumberLeetCode
- LeetCode之Fibonacci Number(Kotlin)LeetCodeKotlin
- LeetCode演算法題LeetCode演算法
- leetcode演算法題解(Java版)-9-N皇后問題LeetCode演算法Java
- leetcode第九題Palindrome Number 驗證迴文數字LeetCode
- leetcode 455題 javaLeetCodeJava
- Leetcode 611 javascript Valid Triangle NumberLeetCodeJavaScript
- LeetCode之Number of Recent Calls(Kotlin)LeetCodeKotlin
- [LeetCode] 248. Strobogrammatic Number IIILeetCode
- [LeetCode] 191. Number of 1 BitsLeetCode
- [LeetCode] 305. Number of Islands IILeetCode
- Leetcode 17 Letter Combinations of a Phone NumberLeetCode
- Leetcode 137. Single Number IILeetCode
- 【Leetcode】1395. Count Number of TeamsLeetCode
- 排序演算法Java實現排序演算法Java
- KMP演算法 Java實現KMP演算法Java
- 排序演算法 Java實現排序演算法Java
- Java實現 LeetCode 35 搜尋插入位置JavaLeetCode
- leetcode演算法題解(Java版)-3-廣搜+HashMapLeetCode演算法JavaHashMap
- LeetCode146 動手實現LRU演算法LeetCode演算法
- leetcode演算法題解(Java版)-14-第k小數問題LeetCode演算法Java
- 蟻群演算法java實現以及TSP問題蟻群演算法求解演算法Java
- LeetCode Palindrome Number(009)解法總結LeetCode
- Leetcode – 017. Letter Combinations of a Phone NumberLeetCode
- [LeetCode] 3238. Find the Number of Winning PlayersLeetCode
- [LeetCode] 2684. Maximum Number of Moves in a GridLeetCode