如果是要求為只能交換相鄰的兩個元素,使陣列或者是字串間有序;
思路:計算陣列中或者是字串間的中元素的逆序數.
如:2 1 3 4 此時逆序數為:1;最小交換次數就為1;
3 2 1 4 此時逆序數為:3;最小交換次數就為3;
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
int main()
//如果是只能交換相鄰的兩個元素,促使陣列中的元素順序保持有序
int res = 0;
for (int i = 0; i < s.length() - 1; ++i)
} }cout << res;
system("pause");
return 0;
}
如果是交換兩元素是不為相鄰的兩元素,是任意的兩個元素.
思路: 檢查陣列中有多少個迴圈節,迴圈節可以這樣理解,比如:5 4 3 2 1 這個遞減的陣列,此時可以將5和1進行互換,4和2進行互換,3自身和自身交換,然後兩者就會到達自己所要排序的最終位置。此時迴圈節為3;最終的交換次數為 n - 迴圈節個數
#include #include #include #include #include using namespace std;
int main()
sort(nums.begin(), nums.end());
int res = 0;
for (int i = 1; i <= n; ++i)
res++;
} }cout << n - res;
system("pause");
return 0;
}
有序陣列兩兩交換,求最小的交換次數。
1 有序陣列,按照0到n 1的序列編號,順序打亂,請您用最小的交換操作次數,使其重新變成遞增序列。假如 編號儲存在乙個陣列array當中。一次交換操作可以將這個陣列的其中兩個數互換。限制 1 n 100000 例 1 輸入 array 2,0,1 輸出 2 解釋 先交換0和2 一次交換操作 再交換1...
將陣列排序所需的最小交換次數
給出乙個具有n個不同值的陣列a,找出將陣列排序所需的最小交換次數。第一行包含乙個整數t,表示測試用例的數量。接下來會有t個測試用例,對於每個測試用例,包含乙個整數n表示陣列a中元素的個數,接下來一行為陣列a,包含n個用空格分開的整數。資料規模 1 t 100 1 n 100 1 a i 1000 對...
有序陣列中找到指定字元出現的次數
解題思路 跟統計字元出現的次數最多是一樣的道理,將給出的列表中資料放在字典中,字典裡面是很好統計次數 然後確定想要的指定字元是哪個 最後對字典進行遍歷,確定key與指定的字元相同的那個資料 list1 s d s a sdf asd a s dicts for i in list1 dicts i ...