LeetCode 1453. 圆形靶内的最大飞镖数量(几何题)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1453. 圆形靶内的最大飞镖数量(几何题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
墻壁上掛著一個圓形的飛鏢靶。現在請你蒙著眼睛向靶上投擲飛鏢。
投擲到墻上的飛鏢用二維平面上的點坐標數組表示。飛鏢靶的半徑為 r 。
請返回能夠落在 任意 半徑為 r 的圓形靶內或靶上的最大飛鏢數。
示例 1:
示例 2:
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-number-of-darts-inside-of-a-circular-dartboard
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
class Solution {double cx, cy;//圓心坐標 public:int numPoints(vector<vector<int>>& points, int r) {int x1, x2, y1, y2;double dx, dy;int i, j, k, count, maxcount=1, n = points.size();for(i = 0; i < n; ++i){x1 = points[i][0];y1 = points[i][1];for(j = i+1; j < n; ++j)//i,j為圓上的點{if(i == j)continue;x2 = points[j][0];y2 = points[j][1];count = 2;int d_d = (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);if(d_d > 4*r*r) continue;count = 0;cx = (x1+x2)/2.0-(y2-y1)*sqrt((r*r-d_d/4.0)/d_d), cy = (y1+y2)/2.0+(x2-x1)*sqrt((r*r-d_d/4.0)/d_d);for(k = 0; k < n; ++k){dx = points[k][0]-cx;dy = points[k][1]-cy;if(dx*dx+dy*dy <= r*r)count++;}maxcount = max(maxcount, count);count = 0;cx = (x1+x2)/2.0+(y2-y1)*sqrt((r*r-d_d/4.0)/d_d), cy = (y1+y2)/2.0-(x2-x1)*sqrt((r*r-d_d/4.0)/d_d);for(k = 0; k < n; ++k){dx = points[k][0]-cx;dy = points[k][1]-cy;if(dx*dx+dy*dy <= r*r)count++;}maxcount = max(maxcount, count);}}return maxcount;} };52 ms 8 MB
總結
以上是生活随笔為你收集整理的LeetCode 1453. 圆形靶内的最大飞镖数量(几何题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 433. 最小基因变化
- 下一篇: LeetCode 990. 等式方程的可