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

网站制作珠海公司域名备案网站备案

网站制作珠海公司,域名备案网站备案,网站开发制作计算器,苏州网站建设价格LeetCode经典算法题:矩阵中省份数量经典题目三角形最大周长java多种解法 文章目录1 省份数量题目描述解题思路与代码解法一:深度优先解法二:广度优先解法三:并查集2 三角形的最大周长题目描述解题思路与代码贪心算法:1…

LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法

文章目录

  • 1 省份数量
    • 题目描述
    • 解题思路与代码
      • 解法一:深度优先
      • 解法二:广度优先
      • 解法三:并查集
  • 2 三角形的最大周长
    • 题目描述
    • 解题思路与代码
      • 贪心算法:

1 省份数量

题目描述

有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c直接相连,那么城市 a 与城市 c 间接相连。

省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。

给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。

返回矩阵中 省份 的数量。

解题思路与代码

解法一:深度优先

获取一个城市,通过递归找到离该城市最远的城市,标记为已访问,然后逐个向内进行标记

 	public int findCircleNum(int[][] isConnected) {int provinces = isConnected.length;boolean[] visited = new boolean[provinces];int circles = 0;for (int i = 0; i < provinces; i++) {if (!visited[i]) {dfs(isConnected, visited, provinces, i);circles++;}}return circles;}public void dfs(int[][] isConnected, boolean[] visited, int provinces, int i) {for (int j = 0; j < provinces; j++) {if (isConnected[i][j] == 1 && !visited[j]) {visited[j] = true;dfs(isConnected, visited, provinces, j);}}}

解法二:广度优先

获取一个城市,先标记与该城市直连的城市(最近的),然后逐步向外扩散寻找

    public int bfs(int[][] isConnected) {int provinces = isConnected.length;boolean[] visited = new boolean[provinces];int circles = 0;Queue<Integer> queue = new LinkedList<Integer>();for (int i = 0; i < provinces; i++) {if (!visited[i]) {queue.offer(i);while (!queue.isEmpty()) {int j = queue.poll();visited[j] = true;for (int k = 0; k < provinces; k++) {if (isConnected[j][k] == 1 && !visited[k]) {queue.offer(k);}}}circles++;}}return circles;}

解法三:并查集

将每个城市看成一个节点,如果两个城市相连,则建立树关系,选出其中一个为head,如果两个树中的节点也相连,则将其中一个head设置为另一个树的head

两个方法 :一个寻找head节点,一个合并树

    static int mergeFind(int[][] isConnected){int provinces = isConnected.length;int[] head = new int[provinces];int[] level = new int[provinces];for (int i = 0; i < provinces; i++) {head[i] = i;level[i] = 1;}for (int i = 0; i < provinces; i++) {for (int j = i + 1; j < provinces; j++) {if (isConnected[i][j] == 1) {merge(i, j,head,level);}}}int count = 0;//找出所有的headfor (int i = 0; i < provinces; i++) {if (head[i] == i) {count++;}}return count;}//查找head节点static int find(int x, int[] arr) {if(arr[x] == x)return x;elsearr[x] = find(arr[x],arr);//路径压缩,每一个节点直接能找到headreturn arr[x];}static void merge(int x, int y,int[] arr,int[] level) {int i = find(x,arr);int j = find(y,arr);//深度比较短的树的head往深度大的树上挂,使合并后的深度尽量小if(i == j){return;}if(level[i] <= level[j]){arr[i] = j;}else{arr[j] = i;}//深度加1level[j]++;}

2 三角形的最大周长

题目描述

给定由一些正数(代表长度)组成的数组 A ,返回由其中三个长度组成的、面积不为零的三角形的最大周长。

如果不能形成任何面积不为零的三角形,返回 0 。

解题思路与代码

贪心算法:

先小到大排序,假设最长边是最后下标,另外两条边是倒数第二和第三下标,则此时三角形周长最大

n < (n-1) + (n-2),如果不成立,意味着该数组中不可能有另外两个值之和大于n,此时将n左移,重新计算

 public int largestPerimeter(int[] A) {Arrays.sort(A);for (int i = A.length - 1; i >= 2; --i) {if (A[i - 2] + A[i - 1] > A[i]) {return A[i - 2] + A[i - 1] + A[i];}}return 0;}
http://www.yayakq.cn/news/510146/

相关文章:

  • 没有经验可以做网站编辑吗深圳物流公司电话号码
  • 气泡做网站上方代码深圳响应式设计企业网站
  • 北京网站名称注册证书手机上可建网站做淘宝客吗
  • 哪些网站可以进行域名注册nginx反向代理内网网站建设
  • 怎么授权小说做游戏网站大连响应式网站
  • 免费建站哪个比较好wordpress首页显示摘要 插件
  • 上海建设银行长宁区各分行网站郑州网站制作费用
  • 网站建设 做个网上商城要多少钱啊为网站添加统计
  • 网站程序代码外包公司简介
  • 网站建设推广选哪家百度云资源搜索平台
  • 收费网站空间免费制作网站服务器
  • 温州手机网站建设wordpress图片文章
  • 织梦如何制作静态网站模板wordpress rss已删除
  • 政务网站建设需求官网建设费用入什么科目
  • php 调试网站新建定制网站费用
  • 成都网站开发培训机构厦门企业自助建站
  • 东莞网站优化什么方法企业咨询端app
  • 网站开发需要什么人员山东百度推广代理商
  • 免费爱做网站手机编程的app
  • 找南昌网站开发公司北京快三平台
  • 烟台网站建设yt游戏网站织梦模板
  • 织梦做英文网站出现乱码海口seo计费
  • 怎么才能注册做网站美丽乡村 村级网站建设
  • 长沙好的网站建设公司排名dw制作电商网页
  • 企业网站开发灰色项目推广渠道
  • 茂名做网站建设公司制作网页的语言
  • 工程建设项目网站网站目录怎么做
  • 给单位做网站需要多少钱深圳网络推广公司推荐
  • 北京西路做网站的公司修改wordpress邮件
  • 福州专业网站制作网站建设需要在网络上如何实现