置換環(huán)

置換環(huán)可以得到數(shù)組排序(可以指定排序方式)所需交換的最小次數(shù)。其的思想是:將每個(gè)節(jié)點(diǎn)指向其排序后應(yīng)該存放的位置,最終首位相接形成一個(gè)環(huán),那么數(shù)組排序所需的最小交換次數(shù)為數(shù)組長(zhǎng)度-環(huán)的數(shù)量。

包含自環(huán)

置換環(huán)-01.jpg

代碼為:

public int template(int[] source, int[] target) {
    int len = source.length;
    Map<Integer, Integer> map = new HashMap<>(); // 存儲(chǔ)目標(biāo)排序每個(gè)元素的位置
    boolean[] flag = new boolean[len]; // 標(biāo)識(shí)當(dāng)前字符串是否已經(jīng)訪問過
    for (int i = 0; i < len; i++) map.put(target[i], i);

    int loop = 0; // 環(huán)的數(shù)量
    for (int i = 0; i < len; i++) {
        if (flag[i]) continue;
        int cur = source[i];
        while (!flag[cur]) {
            flag[cur] = true;
            cur = source[map.get(cur)];
        }
        loop++;
    }
    return len - loop;
}

參考鏈接:

  1. 【二叉樹層序遍歷 + 置換環(huán) + Java】逐層排序二叉樹所需的最少操作數(shù)目
  2. BFS + 置換環(huán) + 離散化
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 課程介紹 先修課:概率統(tǒng)計(jì),程序設(shè)計(jì)實(shí)習(xí),集合論與圖論 后續(xù)課:算法分析與設(shè)計(jì),編譯原理,操作系統(tǒng),數(shù)據(jù)庫概論,人...
    ShellyWhen閱讀 2,465評(píng)論 0 3
  • to-do:看一下別人寫的題解 https://github.com/981377660LMT/algorithm...
    winter_sweetie閱讀 897評(píng)論 1 0
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會(huì)員),僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 18,392評(píng)論 2 36
  • (Since 2020.10.14-2021.3.10) LeetCode刷題筆記,共兩百多題,記錄整理如下: 動(dòng)...
    周恩國(guó)的學(xué)習(xí)筆記閱讀 905評(píng)論 0 1
  • 目標(biāo)一周刷2道題也不知道能堅(jiān)持幾天,這玩意在leetcode做完怎么保存啊 給一個(gè)有序的數(shù)組,數(shù)組中有重復(fù)數(shù)字,輸...
    H丶ym閱讀 679評(píng)論 0 1

友情鏈接更多精彩內(nèi)容