1、有序陣列,按照0到n – 1的序列編號,順序打亂,請您用最小的交換操作次數,使其重新變成遞增序列。假如:編號儲存在乙個陣列array當中。一次交換操作可以將這個陣列的其中兩個數互換。
限制:
1 <= n <= 100000
例 1:
輸入: array = [2,0,1]
輸出: 2
解釋: 先交換0和2(一次交換操作),再交換1和2(一次交換操作)即可。
例 2:
輸入: array = [0,1,2,3,4]
輸出: 0
解釋: 不用任何交換。
2、若初始序列為gbfcdae,那麼至少需要__次兩兩交換,才能使該序列變為abcdefg。任給乙個自由a--g這7個字母組成的排列,最壞的情況下需要至少__次兩兩交換,才能使序列變為abcdefg。
解題思路:求陣列中環的數量。
思路解析:private static int function(int array)
int count = 0;
int len = array.length;
int temp = new int[len];
for (int i = 0; i < len; i++) }}
return len - count;
}
1、首先,最多需要交換幾次?答案是n次,這很好想,把每個數放到本應在的地方,即使那個數本來就在那我們依舊算它交換一次,所以最多是n次。
然後,我們要找環,假設這個環有k個數,所謂的環就是這k個數可以不借助其他的數進行歸位,然後我們交換k-1次即可,可以發現每多乙個環就少一次交換,所以是n-環的數量。
2、
求兩個有序陣列兩兩相加的值最小的K個數
搜尋原題在這 題目描述 有兩個大小為n的有序陣列a b 從大到小 現在需要找出k個最大的數字,其中每個數字是這樣構成的 ai bj 0 i,j 例1 input a為7 6 5 4 b為4 3 2 1 k 4output 11 10 10 9 例2 input a為7 4 3 2 b為6 3 1 1...
兩兩交換鍊錶的節點
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。例如 給定 1 2 3 4,你應該返回 2 1 4 3。在看到這道題目的時候,我感覺很簡單,可能就是邊界條件需要注意一下,我們需要乙個指標在整個鍊錶上進行移動,這個指標每次都是移動兩步。這樣的話基本就可以實現兩兩交換 如下 class sol...
兩兩交換鍊錶中的節點
給乙個鍊錶,兩兩交換其中的節點,然後返回交換後的鍊錶。樣例 給出 1 2 3 4,你應該返回的鍊錶是 2 1 4 3。遞迴方式 交換p 和 p.next 結點 swaphead p.next swaphead.next p definition for singly linked list.publ...