我有一个数组,我想用n-indexes移动数组元素。为了简化问题,我想说,我想转移1-index
然后,我可以写一个while
或recursion
来使它成为n-times
。
说,数组是A = [3, 8, 9, 7, 6]
,我希望right shift
1-index
使其成为A = [6, 3, 8, 9, 7]
我想到一个HashMap将采用索引,并将转换为n个索引。说,
Map<Integer, Integer> map = new HashMap<>();
int n = 2;
for(int j =0; j < arr.length; j++){
if(j+2 > arr.length -1){
map.put(j+2 - arr.length, arr[j]);
}
map.put(j+2, arr[j]);
}
for(Map.Entry<Integer, Integer> map : amp.entrySet()){
arr[map.getKey()] = map.getValue();
}
解决方案对我来说感觉不太好。怎么写算法呢?
答案 0 :(得分:1)
std::istringstream
答案 1 :(得分:0)
您可以使用下面的简单方法,它将采用数组和移位数作为输入。我已添加内联注释来描述每个步骤。
static String[] shiftArray(String[] inputArray, int shifts) {
// Loop the number of shifts
for (int x = 0; x < shifts; x++) {
//Last element will be store in temporary variable
String lastElm = inputArray[inputArray.length - 1];
//This loop will shift array content by one
for (int i = inputArray.length; i > 0; i--) {
if (i == 1) {
inputArray[0] = lastElm;
} else {
inputArray[i - 1] = inputArray[i - 2];
}
}
}
return inputArray;
}
答案 2 :(得分:0)
我在这里提供了两个解决方案,其中第一个是从论坛中收集的。
/*solution-a*/
public static int swap(int itself , int dummy){
return itself;
}
public static void reverse(int[] A, int start, int end){
int i = start, j = end;
while(i < j){
A[i] = swap(A[j], A[j] = A[i]);
i++;
j--;
}
}
public int[] solution(int[] A, int K) {
if(K > A.length){
return null;
}
reverse(A, 0, A.length -1);
reverse(A, 0, K-1);
reverse(A, K, A.length -1);
return A;
}
/*ENd of solution-a*/
/*ENd of solution-b*/
public static int[] solution1(int[] arr, int n){
Map<Integer, Integer> map = new HashMap<>();
for(int j =0; j < arr.length; j++){
if(j+n > arr.length -1){
map.put(j+n - arr.length, arr[j]);
continue;
}
map.put(j+n, arr[j]);
}
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
arr[entry.getKey()] = entry.getValue();
}
return arr;
}
/*ENd of solution-b*/