我很难找到如何反转存储在整数数组中的值这个代码:
private static void randomizeArray (int[] arr, int upperLimit)
{
// Loop to generate and store in array random numbers from 1 to upperLimit
Random rand = new Random();
for (int i = 0; i < arr.length; i++)
arr[i] = rand.nextInt(upperLimit) + 1;
}
private static void printArray (String heading, int[] arr)
{
// Loop to print array numbers
System.out.print(heading + ": [");
for (int i = 0; i < arr.length; i++)
System.out.printf("%3d", arr[i]);
System.out.println("]");
}
private static int[] reverseArray (int[] arr)
{
}
}
答案 0 :(得分:1)
做这样的事情:
void reverseArray(int[] arr) {
reverse(arr, 0, arr.length - 1);
}
void reverse(int[] arr, int s, int e) {
if(s < e) {
/* swap start and end index elements */
int tmp = arr[s];
arr[s] = arr[e];
arr[e] = tmp;
reverse(arr, ++s, --e);
}
}
递归,不需要任何额外的缓冲区并在O(n)中运行。
迭代版本可以是这样的:
int[] reverseArray(int[] arr) {
int startIndex = 0, endIndex = arr.length - 1;
for (int i=startIndex; i<endIndex/2; i++) {
int tmp = arr[i];
arr[i] = arr[endIndex-i];
arr[endIndex-i] = tmp;
}
return arr;
}
答案 1 :(得分:0)
private static int[] reverseArray (int[] arr)
{
if(arr.length == 1){
return arr;
}
else{
int temp = arr[0];
int tempArr[] = new int[arr.length-1];
System.arraycopy(arr, 1, tempArr, 0, tempArr.length);
tempArr = reverseArray(tempArr);
System.arraycopy(tempArr, 0, arr, 0, tempArr.length);
arr[arr.length-1] = temp;
return arr;
}
}
答案 2 :(得分:0)
要创建递归算法,您需要做两件事。
你可以合理地遇到的最小的案例是什么,结果应该是什么?
空数组是它自己的反转。不能小于此。
rev([])= []
根据下一步,您可能还需要将单例案例定义为基本案例:
rev([r])= [r]
给定一个函数rev n ,适用于“size”&lt; = n 的任何输入,用于“size”的某些合适定义“,您可以使用该函数为”size“ n + 1的任何输入生成结果吗?
rev([r 1 ,...,r n ,r n + 1 ])= [r n +1 ] ++ rev n ([r < sub> 1 ,...,r n ])
或(假设单例情况也被定义为基本情况)
rev([r 1 ,...,r n ,r n + 1 ])= [r n +1 ] ++ rev n ([r < sub> 2 ,... r n ])++ [r 1 ]
答案 3 :(得分:0)
为了编写一个反转数组的递归程序,你需要:
一个。将第一个元素与数组的最后一个元素交换
湾呼叫 上面的子数组没有第一个和最后一个元素
℃。停止调用 - 如果没有要交换的元素
考虑以下代码
void reverseArray(int arr[], int start, int end){
int temp;
if(start >= end)
return;
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
rvereseArray(arr, start+1, end-1);
}
此代码不完全适合您的模板,您需要调整它以返回int []
答案 4 :(得分:-1)
有很多方法可以做到这一点。使用Stack非常容易,但是通过将值存储在临时数组中,还有另一种简单的方法。基本上你使用j作为指向arr数组中最后一个点的指针,并加载tempArray前面的任何值。在循环的每次迭代之后,我们递减j并递增i,改变它们的指针以继续将arr的值以相反的顺序放入tempArray中。希望有所帮助。
private static int[] reverseArray (int[] arr)
{
int[] tempArray = new int[arr.length];
int j = arr.length-1;
for(int i = 0; i < arr.length; i++){
tempArray[i] = arr[j];
j--;
}
return tempArray;
}