当前位置: 首页 > news >正文

公司网站建设注册免费建设一个网站

公司网站建设注册,免费建设一个网站,多用户商城系统的服务态度,魏县网络营销推广方法2024.1.26 题目来源我的题解方法一 使用dfs对每一组查询都求最近公共祖先#xff08;会超时#xff0c;通不过#xff09;方法二 不需要构建图#xff0c;直接在原始数组上进行求最大公共祖先的操作。 题目来源 力扣每日一题#xff1b;题序#xff1a;2846 我的题解 … 2024.1.26 题目来源我的题解方法一 使用dfs对每一组查询都求最近公共祖先会超时通不过方法二 不需要构建图直接在原始数组上进行求最大公共祖先的操作。 题目来源 力扣每日一题题序2846 我的题解 方法一 使用dfs对每一组查询都求最近公共祖先会超时通不过 使用dfs对每一组查询都去找最近公共祖先并在这个过程中统计边的权重最后通过TreeMap计算出边权重集合中元素重复的最大次数贪心策略可知结果为查询路径上总共的边-最大次数。 时间复杂度O( n 2 n^2 n2) 空间复杂度O( m × n m\times n m×n) ListInteger list;public int[] minOperationsQueries(int n, int[][] edges, int[][] queries) {MapInteger,Integer[] graphcreateGraph(n,edges);int qnqueries.length;int[] resnew int[qn];for(int i0;iqn;i){int fromqueries[i][0];int toqueries[i][1];if(fromto)continue;listnew ArrayList();boolean[] visitednew boolean[n];dfs(graph,from,to,visited,new ArrayList());res[i]needChange(list);}return res;}public int needChange(ListInteger l){TreeMapInteger, Long frequencyMap new TreeMap(l.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting())));TreeMapInteger, Long frequencySortMapnew TreeMap(Comparator.comparing(frequencyMap::get));frequencySortMap.putAll(frequencyMap);return l.size()-Integer.parseInt(frequencySortMap.get(frequencySortMap.lastKey()).toString());}public MapInteger,Integer[] createGraph(int n,int[][] edges){MapInteger,Integer[] graphnew HashMap[n];for(int i0;in;i)graph[i]new HashMap();for(int[] e:edges){int from e[0];int toe[1];int vale[2];graph[from].put(to,val);graph[to].put(from,val);}return graph;}public void dfs(MapInteger,Integer[] graph,int from,int to,boolean[] visited,ListInteger path){if(fromto){listnew ArrayList(path);return ;}visited[from]true;for(int next:graph[from].keySet()){if(!visited[next]){path.add(graph[from].get(next));dfs(graph,next,to,visited,path);path.remove(path.size()-1);}}visited[from]false;}方法二 不需要构建图直接在原始数组上进行求最大公共祖先的操作。 参考官方题解 以节点 0 为根节点使用数组 count[i]记录节点 i到根节点 0 的路径上边权重的数量即 count[i][j] 表示节点 i到根节点 0 的路径上权重为 j的边数量。对于查询 queries[i][ a i a_i ai​, b i b_i bi​]记节点 l c a i lca_i lcai​为节点 a i a_i ai​与 b i b_i bi​的最近公共祖先那么从节点 a i a_i ai​到节点 b i b_i bi​的路径上权重为 j 的边数量 t j t_j tj​的计算如下 t j count [ a i ] [ j ] count [ b i ] [ j ] − 2 × count [ lca i ] [ j ] t_j \textit{count}[a_i][j] \textit{count}[b_i][j] - 2 \times \textit{count}[\textit{lca}_i][j] tj​count[ai​][j]count[bi​][j]−2×count[lcai​][j] 为了让节点 a i a_i ai​到节点 b i b_i bi​路径上每条边的权重都相等贪心地将路径上所有的边都更改为边数量最多的权重即可即从节点 a i a_i ai​到节点 b i b_i bi​路径上每条边的权重都相等所需的最小操作次数 r e s i ​ res_i​ resi​​的计算如下 res i ∑ j 1 W t j − max ⁡ 1 ≤ j ≤ W t j \textit{res}_i \sum_{j1}^{W}t_j - \max_{1 \le j \le W}t_j resi​∑j1W​tj​−max1≤j≤W​tj​ 其中 W26W 26W26 表示权重的最大值。 时间复杂度O((mn)×Wm×logn)其中 n 是节点数目m 是查询数目W 是权重的可能取值数目。 空间复杂度O(n×Wm) class Solution {static final int W 26;public int[] minOperationsQueries(int n, int[][] edges, int[][] queries) {int m queries.length;MapInteger, Integer[] neighbors new Map[n];for (int i 0; i n; i) {neighbors[i] new HashMapInteger, Integer();}for (int[] edge : edges) {neighbors[edge[0]].put(edge[1], edge[2]);neighbors[edge[1]].put(edge[0], edge[2]);}Listint[][] queryArr new List[n];for (int i 0; i n; i) {queryArr[i] new ArrayListint[]();}for (int i 0; i m; i) {queryArr[queries[i][0]].add(new int[]{queries[i][1], i});queryArr[queries[i][1]].add(new int[]{queries[i][0], i});}int[][] count new int[n][W 1];boolean[] visited new boolean[n];int[] uf new int[n];int[] lca new int[m];tarjan(0, -1, neighbors, queryArr, count, visited, uf, lca);int[] res new int[m];for (int i 0; i m; i) {int totalCount 0, maxCount 0;for (int j 1; j W; j) {int t count[queries[i][0]][j] count[queries[i][1]][j] - 2 * count[lca[i]][j];maxCount Math.max(maxCount, t);totalCount t;}res[i] totalCount - maxCount;}return res;}public void tarjan(int node, int parent, MapInteger, Integer[] neighbors, Listint[][] queryArr, int[][] count, boolean[] visited, int[] uf, int[] lca) {if (parent ! -1) {System.arraycopy(count[parent], 0, count[node], 0, W 1);count[node][neighbors[node].get(parent)];}uf[node] node;for (int child : neighbors[node].keySet()) {if (child parent) {continue;}tarjan(child, node, neighbors, queryArr, count, visited, uf, lca);uf[child] node;}for (int[] pair : queryArr[node]) {int node1 pair[0], index pair[1];if (node ! node1 !visited[node1]) {continue;}lca[index] find(uf, node1);}visited[node] true;}public int find(int[] uf, int i) {if (uf[i] i) {return i;}uf[i] find(uf, uf[i]);return uf[i];} }困难题果然不是我会做的做做搬运工得了 有任何问题欢迎评论区交流欢迎评论区提供其它解题思路代码也可以点个赞支持一下作者哈~
http://www.hkea.cn/news/14471872/

相关文章:

  • 煎蛋网站用什么做的一般做个小程序多少钱
  • 友情链接出售郑州厉害的seo优化顾问
  • 荣耀手机商城官方网站thinkphp做网站好吗
  • 常用的网站开发技术有哪几种河北建设广州分公司网站
  • 电影网站建设目的做PPT素材用到的网站
  • 中国那些企业做网站做得好wordpress配置教程
  • 广西兴业县建设局网站泰安住房和城乡建设局网站
  • 如何做网站清风制作咸阳网站建设哪家专业
  • 网站开发毕设设计论文建立个人网站要钱吗
  • 哪些公司做网站比较好微信网页插件 wordpress
  • 网站信息化建设总体情况wordpress照片主题
  • 北大荒建设集团网站厦门网站建设680元
  • 网站建设-部署与发布的题目网店如何推广自己的产品
  • 广州知名网站建设东莞北京网站建设价格
  • jq网站特效插件下载沈阳男科医院哪家好医
  • 潜江哪里做网站成都seo公司
  • 杭州倍世康 做网站软件平台介绍
  • 风景名胜区建设部网站天津做网站费用
  • 企业网站包含内容网站建设所用系统
  • 湖北网站建设公司哪家好苏州嘉盛建设工程有限公司网站
  • 手机建站官网湖州网站建设服务公司
  • 网站建设为风险分析潍坊网站开发公司
  • 阿里巴巴专门做外贸的网站优设设计师网站
  • 怎么用html做图片展示网站网站建设推广小程序
  • 可以放钓鱼网站的免费空间广州一网通注册公司
  • 东西湖区建设局网站网站怎么做图片转链
  • 网站建设分几个阶段广州网站定制多少钱
  • 绍兴企业网站开发网站建设流程步骤为需求分析
  • 一个网站有多个域名工程师培训
  • 网站规划与网页设计第四版电子书网站如何做信息表