OJ練習 2 最小交換次數

2021-09-29 01:34:30 字數 623 閱讀 5006

給定乙個由n個不同的elements組成的陣列,找到對陣列進行排序所需的最小交換次數。您需要完成該函式,該函式返回乙個表示對陣列進行排序所需的最小交換次數的整數。

首先對佇列進行排序,排完序之後,與原序列比較。從左向右將不在自己位置上的數字交換到自己位置上即可。

如 5 1 3 2 4 排序後為 1 2 3 4 5

先將第一位歸為 即把1 5互換,為 1 5 3 2 4

再看第二位 把 2 5 互換, 為 1 2 3 5 4

再看第三位 正確就不管

第四位 把 5 4互換,整個序列變為 1 2 3 4 5,與有序序列相同。交換停止

public void solution(int  a)

arrays.sort(order);

int count = 0;

for (int j = 0; j < num; j++) }}

}system.out.println(count);

}

主要的疑惑在於怎麼去找到交換最小的次數。那我們一定要開天眼的,用已知的有序去與無序的比較,因為不在自己位置上的數,至少要經過一次交換才能回到自己的位置上,交換完後這個數就固定下再也不管了, 這樣就能保證交換的次數是最小的次數。

演算法 最小交換次數

給出乙個具有n個不同值的陣列a,找出將陣列排序成順序所需的最小交換次數。陣列a 1 4 6 3 7 9 5 2 1.隨機生成小於n的序列,使用乙個陣列標記當前生成的數字是否已經在序列中,值為1表示已經存在 2.按位比較替換,直到當前位的值是終態序列對應位上的值。include include inc...

將陣列排序所需的最小交換次數

給出乙個具有n個不同值的陣列a,找出將陣列排序所需的最小交換次數。第一行包含乙個整數t,表示測試用例的數量。接下來會有t個測試用例,對於每個測試用例,包含乙個整數n表示陣列a中元素的個數,接下來一行為陣列a,包含n個用空格分開的整數。資料規模 1 t 100 1 n 100 1 a i 1000 對...

801 使序列遞增的最小交換次數

我們有兩個長度相等且不為空的整型陣列 a 和 b 我們可以交換 a i 和 b i 的元素。注意這兩個元素在各自的序列中應該處於相同的位置。在交換過一些元素之後,陣列 a 和 b 都應該是嚴格遞增的 陣列嚴格遞增的條件僅為a 0 a 1 a 2 a a.length 1 給定陣列 a 和 b 請返回...