日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《LeetCode之每日一题》:148.回旋镖的数量

發布時間:2024/1/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《LeetCode之每日一题》:148.回旋镖的数量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回旋鏢的數量

  • 有關題目
    • 題解

題目鏈接: 回旋鏢的數量

有關題目

給定平面上 n 對 互不相同 的點 points ,其中 points[i] = [xi, yi] ?;匦S 是由點 (i, j, k) 表示的元組 , 其中 i 和 j 之間的距離和 i 和 k 之間的距離相等(需要考慮元組的順序)。返回平面上所有回旋鏢的數量。 示例 1:輸入:points = [[0,0],[1,0],[2,0]] 輸出:2 解釋:兩個回旋鏢為 [[1,0],[0,0],[2,0]][[1,0],[2,0],[0,0]] 示例 2:輸入:points = [[1,1],[2,2],[3,3]] 輸出:2 示例 3:輸入:points = [[1,1]] 輸出:0 提示:n == points.length 1 <= n <= 500 points[i].length == 2 -10^4 <= xi, yi <= 10^4 所有點都 互不相同

題解

Tips

①C++ 11原本的auto 寫法 for(auto & j : cnt),然后下方使用 j.first,j.second。C++17的寫法改成,可以直接取 map 里面 [v1, v2] 充當 j.first 及 j.second,如果下方不需要讀值則可以用_代替 ②auto&auto &&的區別 &為引用,相當于C中的指針,拿到所引用數據的地址,&&為右值引用,右值可以看作程序運行中的臨時結果,直接引用返回的對象,避免了對象復制,從而提高效率。

法一:枚舉 + 哈希表
參考官方題解

思路: 對于點points[i],有 m 個點到其距離相等,結合排列數的知識 我們需要從中選取兩個,故有 A(2,m) = m * (m - 1)中組合我們使用哈希表鍵存儲距離的平方,值存儲 m 個點, 對于每一個點points[i],我們更新一次答案,直至枚舉一遍數組 class Solution { public:int numberOfBoomerangs(vector<vector<int>>& points) {int ans = 0;for (auto& p : points){unordered_map<int, int> mp;for (auto& p1 : points){int squareOfDistance = (p[0] - p1[0]) * (p[0] - p1[0]) +(p[1] - p1[1]) * (p[1] - p1[1]);++mp[squareOfDistance];}for (auto& [_, m] : mp){ans += m * (m - 1);//排列數A(2,m) = m * (m - 1);}}return ans;} };

時間復雜度:O(n^2),n 為points數組的長度
空間復雜度:O(n),哈希表存儲所需O(n)復雜度

法二:優化法一
參考官方題解評論區下夢璃夜·天星

空間優化,少一次遍歷。利用排列組合中,每次多一個點,該點和前面每個點各有兩個新的組合。 class Solution { public:int numberOfBoomerangs(vector<vector<int>>& points) {int ans = 0;unordered_map<int, int> mp;for (auto&& p1 : points){mp.clear();for (auto&& p2 : points){int dis = (p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1]);ans += 2 * mp[dis]++;}}return ans;} };

時間復雜度:O(n^2),n 為points數組的長度
空間復雜度:O(n)

總結

以上是生活随笔為你收集整理的《LeetCode之每日一题》:148.回旋镖的数量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。