刷算法题:
第一遍:1.看5分钟,没思路看题解
2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。
3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法)
4.整理到自己的自媒体平台。
5.再刷重复的类似的题目,根据时间和任务安排刷哪几个板块
6.用c++语言 都刷过一遍了 就刷中等
一.题目
给你一个数组 points ,其中 points[i] = [xi, yi] ,表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。
同时给你一个数组 queries ,其中 queries[j] = [xj, yj, rj] ,表示一个圆心在 (xj, yj) 且半径为 rj 的圆。
对于每一个查询 queries[j] ,计算在第 j 个圆 内 点的数目。如果一个点在圆的 边界上 ,我们同样认为它在圆 内 。
请你返回一个数组 answer ,其中 answer[j]是第 j 个查询的答案。
示例 1:
输入:points = [[1,3],[3,3],[5,3],[2,2]], queries = [[2,3,1],[4,3,1],[1,1,2]]
输出:[3,2,2]
解释:所有的点和圆如上图所示。
queries[0] 是绿色的圆,queries[1] 是红色的圆,queries[2] 是蓝色的圆。
示例2:
输入:points = [[1,1],[2,2],[3,3],[4,4],[5,5]], queries = [[1,2,2],[2,2,2],[4,3,2],[4,3,3]]
输出:[2,3,2,4]
解释:所有的点和圆如上图所示。
queries[0] 是绿色的圆,queries[1] 是红色的圆,queries[2] 是蓝色的圆,queries[3] 是紫色的圆。
提示
1 <= points.length <= 500
points[i].length == 2
0 <= xi, yi <= 500
1 <= queries.length <= 500
queries[j].length == 3
0 <= xj, yj <= 500
1 <= rj <= 500
所有的坐标都是整数
二、反思
1.自己的解法
class Solution {
public:
vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {
int n=queries.size();
int m=points.size();
vector<int> ans(n);
for(int i=0;i<n;i++){
for(int j=0;j<m;++j){
//距离公式
if((queries[i][0]-points[j][0])*(queries[i][0]-points[j][0])+(queries[i][1]-points[j][1])*(queries[i][1]-points[j][1])<=queries[i][2]*queries[i][2]){
ans[i]++;
}
}
}
return ans;
}
};
2.题目的解法
class Solution {
public:
vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {
int m = points.size(), n = queries.size();
vector<int> ans(n);
for (int i = 0; i < n; ++i) {
int cx = queries[i][0], cy = queries[i][1], cr = queries[i][2];
for (int j = 0; j < m; ++j) {
int px = points[j][0], py = points[j][1];
if ((cx - px) * (cx - px) + (cy - py) * (cy - py) <= cr * cr) {
++ans[i];
}
}
}
return ans;
}
};
3.思路的异同
思路几乎一模一样,题目的解法为了美观就多申明了一些变量。
三.进步的地方
size()函数后面有个()啊!!!!!!!
就连数组的中等题都难不住自己了。我觉得自己可以做做之后的题目了。字符串大差不差,看看要不要坐一坐指针。