东莞手机网站建设公司,免费logo设计图案,印度做爰免费网站视频,东城做企业网站多少钱链接#xff1a;
1782. 统计点对的数目
题意#xff1a;
给n个点和m条无向边#xff08;可重复#xff09;#xff0c;q个查询
定义edge[a]为一个点是a的边数量#xff0c;定义ret[a,b]是edge[a]edge[b]-#xff08;a与b的边#xff09;
q个查询q个答案#xff0…链接
1782. 统计点对的数目
题意
给n个点和m条无向边可重复q个查询
定义edge[a]为一个点是a的边数量定义ret[a,b]是edge[a]edge[b]-a与b的边
q个查询q个答案第i次查询值val[i]求所有的1abn条件下有多少ret[a,b]val[i]
解
TLE卡47了
看了评论区用空间换时间双指针
实际代码
class Solution {
public:typedef pairint,int pii;
vectorint countPairs(int n, vectorvectorint edges, vectorint queries)
{vectorintedgeNum(n1);//记录edge[a]mappii,intedgePair;for(auto edge:edges){if(edge[0]edge[1]) swap(edge[0],edge[1]);edgeNum[edge[0]];edgeNum[edge[1]];edgePair[{edge[0],edge[1]}];//记录a与b的边}vectorintans; vectorintedgeNS(edgeNum); sort(edgeNS.begin(),edgeNS.end());//空间换时间 排序for(auto querie:queries){int temp0;int left1,rightn;while(leftright)//双指针 {if(edgeNS[left] edgeNS[right] querie) left;else{temp right-left;right--;}}for(auto Pair:edgePair){int sedgeNum[Pair.first.first]edgeNum[Pair.first.second];if(squerie s-Pair.secondquerie) temp--;}ans.push_back(temp);}return ans;
}
};
限制
2 n 2 * 1041 edges.length 1051 ui, vi nui ! vi1 queries.length 200 queries[j] edges.length