Java項鏈是一個經典的問題,指的是將一條由n個珠子組成的項鏈進行翻轉和旋轉的操作。
在項鏈上進行翻轉操作,就是將其中一段珠子翻轉過來,比如說將第i到第j個珠子翻轉,則第i個珠子與第j個珠子交換位置,第i+1個珠子與第j-1個珠子交換位置,以此類推直至i與j相遇。翻轉操作可以直接改變珠子在項鏈上的相對順序。
而旋轉操作則是將項鏈或者其中一部分向左或右移動k個珠子,導致末尾的k個珠子移到了開頭,或者開頭的k個珠子移到了末尾。旋轉操作不改變珠子在項鏈上的相對順序。
public static int[] flip(int[] a, int i, int j){ while(i<j){ int temp = a[i]; a[i] = a[j]; a[j] = temp; i++; j--; } return a; } public static int[] rotate(int[] a, int k){ int n = a.length; reverse(a, 0, n-1); reverse(a, 0, k-1); reverse(a, k, n-1); return a; } public static void reverse(int[] a, int i, int j){ while(i<j){ int temp = a[i]; a[i] = a[j]; a[j] = temp; i++; j--; } }
上述代碼實現了項鏈翻轉和旋轉的操作。flip方法接收一個整型數組a和兩個下標i和j,將a數組從i到j的元素進行翻轉。rotate方法接收一個整型數組a和一個整型變量k,將a數組向左旋轉k個元素。它先將整個數組翻轉,再分別將0~k-1和k~n-1位置之間的元素分別翻轉,最后得到向左旋轉k個元素后的數組a。
上一篇div下input居中
下一篇ajax獲取復選框選中值