亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java實(shí)現(xiàn)并查集

 更新時(shí)間:2020年07月05日 08:53:32   作者:NinoSun  
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)并查集,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java實(shí)現(xiàn)并查集的具體代碼,供大家參考,具體內(nèi)容如下

自下而上的樹結(jié)構(gòu)

接口

/**
 * @author Nino
 */
public interface UF {
 int size();

 /**
  * 看兩個(gè)元素是否相連
  * @param p
  * @param q
  * @return
  */
 boolean isConnected(int p, int q);

 /**
  * 將兩個(gè)元素合并在一起,變成一個(gè)集合中的元素
  * @param p
  * @param q
  */
 void unionElements(int p, int q);
}

使用路徑壓縮的并查集

/**
 * @author Nino
 */
public class UnionFind5 implements UF {
 private int[] parent;
 //rank[i]表示以i為根的集合中樹的層數(shù)
 private int[] rank;

 public UnionFind5(int size) {
  parent = new int[size];
  rank = new int[size];
  for (int i = 0; i < size; i++) {
   parent[i] = i;
   rank[i] = 1;
  }
 }

 @Override
 public int size() {
  return parent.length;
 }

 /**
  * 查找過程,查找元素p所對(duì)應(yīng)的集合編號(hào)
  * O(h)復(fù)雜度,h為樹的高度
  * 使用路徑壓縮
  * @param p
  * @return
  */
 private int find(int p) {
  if (p < 0 && p >= parent.length) {
   throw new IllegalArgumentException("p is illegal");
  }
  if (p != parent[p]) {
   parent[p] = find(parent[p]);
  }
  return parent[p];
 }

 /**
  * 查詢p, q是否同屬一個(gè)集合
  * 時(shí)間復(fù)雜度O(h)
  * @param p
  * @param q
  * @return
  */
 @Override
 public boolean isConnected(int p, int q) {
  return find(p) == find(q);
 }

 /**
  * 合并元素p, q所屬的集合,只需要把Rank低的根節(jié)點(diǎn)指向Rank高的根節(jié)點(diǎn)就可以
  * O(h)復(fù)雜度
  * @param p
  * @param q
  */
 @Override
 public void unionElements(int p, int q) {
  int pRoot = find(p);
  int qRoot = find(q);

  if (pRoot == qRoot) {
   return;
  }
  //敗者食塵
  if (rank[pRoot] < rank[qRoot]) {
   parent[pRoot] = qRoot;
  } else if (rank[qRoot] < rank[pRoot]) {
   parent[qRoot] = pRoot;
  } else {
   parent[qRoot] = pRoot;
   rank[pRoot] += 1;
  }
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot中如何使用Jackson

    Springboot中如何使用Jackson

    這篇文章主要介紹了Springboot中如何使用Jackson,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • Java超詳細(xì)梳理異常處理機(jī)制

    Java超詳細(xì)梳理異常處理機(jī)制

    異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會(huì)根據(jù)身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機(jī)制是我們java語言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力,程序出現(xiàn)的錯(cuò)誤,程序可以安全的退出,以保證程序正常的運(yùn)行等
    2022-04-04
  • MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)源的示例代碼

    MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)源的示例代碼

    這篇文章主要介紹了MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)源的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 一文教你掌握J(rèn)ava如何實(shí)現(xiàn)判空

    一文教你掌握J(rèn)ava如何實(shí)現(xiàn)判空

    實(shí)際項(xiàng)目中我們會(huì)有很多地方需要判空校驗(yàn),如果不做判空校驗(yàn)則可能產(chǎn)生NullPointerException異常。所以本文小編為大家整理了Java中幾個(gè)常見的判空方法,希望對(duì)大家有所幫助
    2023-04-04
  • springboot集成ftp實(shí)現(xiàn)文件上傳

    springboot集成ftp實(shí)現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了springboot集成ftp實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Java中instanceof關(guān)鍵字實(shí)例講解

    Java中instanceof關(guān)鍵字實(shí)例講解

    大家好,本篇文章主要講的是Java中instanceof關(guān)鍵字實(shí)例講解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Java中.divide()方法使用及注意事項(xiàng)詳解

    Java中.divide()方法使用及注意事項(xiàng)詳解

    divide方法就是bigdecimal類中的一個(gè)除法計(jì)算方法,由于該divide方法參數(shù)類型眾多并且不易理解容易出現(xiàn)錯(cuò)誤,這篇文章主要給大家介紹了關(guān)于Java中.divide()方法使用及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Java求兩集合的交集、并集、差集實(shí)例

    Java求兩集合的交集、并集、差集實(shí)例

    這篇文章主要介紹了Java求兩集合的交集、并集、差集實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java定時(shí)任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解

    Java定時(shí)任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解

    這篇文章主要介紹了Java定時(shí)任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解,  定時(shí)任務(wù)就是在指定時(shí)間執(zhí)行程序,或周期性執(zhí)行計(jì)劃任務(wù),Java中實(shí)現(xiàn)定時(shí)任務(wù)的方法有很多,本文從從JDK自帶的一些方法來實(shí)現(xiàn)定時(shí)任務(wù)的需求,需要的朋友可以參考下
    2024-01-01
  • Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密功能)

    Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密功能)

    這篇文章主要給大家介紹了關(guān)于Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2018-05-05

最新評(píng)論