编写一个递归方法,该方法调用一个整数数组,并以相反的排序顺序返回该数组

用户名

我过几天要参加编程考试,所以我只是为了练习而做一些练习。但是,我一直被这个问题困扰,我开始怀疑是否有可能这样做。编写一个名为arrayReverse的递归方法,该方法接受一个整数数组,并以反向排序的顺序返回该数组。因此,一个例子是:

input: [1,2,3]    
output:[3,2,1]

我无法解决。我的直觉是采用数组的最后一个元素,将其放在开头,即:index [0],然后递归调用数组的其余部分,然后采用新的最后一个元素并将其放在index [1]上。不幸的是,实现比我想象的要难,但是我(为了尝试)以接受2个数组的方式编辑了这个问题,这是我的代码:

import java.util.Arrays;

class Test {

  int[] arrayReverse(int[] m, int[] mReverse) {
    if (m.length == 1) {
        mReverse[mReverse.length - 1] = m[0];
        return mReverse;
    } else {
        int lastNum = m[m.length - 1];
        mReverse[mReverse.length - m.length] = lastNum;
        int[] arrayMinusOne = cropArray(m);
        return arrayReverse(arrayMinusOne, mReverse);
    }
}

int[] cropArray(int[] m) {
    int[] mCropped = new int[m.length - 1];
    for (int i = 0; i < m.length - 1; i++) {
        mCropped[i] = m[i];
    }
    return mCropped;
}

}
  void demo() {

    int[] helpTest4 = new int[]{1, 2, 3};
    int[] emptyArray = new int[helpTest4.length];

    int[] test4 = arrayReverse(helpTest4, emptyArray);
    System.out.println(Arrays.toString(test4));


}

public static void main(String[] args) {
    new Test().demo();
}
}

它运行完美,但是由于两个原因,我对结果不满意:

  1. 我无法做到完全递归。我在cropArray中使用了for循环。
  2. 我无法在一个阵列上做到这一点。

如何才能做到这一点?

阿努拉格·沙玛(Anurag Sharma)

选项1:在递归函数中仅使用一个参数(数组)

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

public class MyClass {
     public static void main(String[] args) {

        int[] arr = {1,2,3,4,5};
        int[] reversed = reverseArray(arr);
        System.out.println(Arrays.toString(reversed));
    }

    public static int[] reverseArray(int[] arr)
    {
        if (arr.length == 0)
            return arr;

        // remove first element   
        int first = arr[0];
        int[] list = Arrays.copyOfRange(arr, 1, arr.length);

        //Calling Function Recursively get reversed array
        int[] returnArr = reverseArray(list);

        //Add original first to the last of the arrayToReturn
        returnArr = Arrays.copyOf(returnArr, returnArr.length + 1);
        returnArr[returnArr.length - 1] = first;

        return  returnArr;
    }
}

选项2:

void reverseArray(int[] x){
   reverse(x, 0, x.length -1);
}

void reverse(int[] x, int i, int j){
    if(i<j){//Swap ith with jth element where i and j are equidistant from ends
       int tmp = x[i];
       x[i] = x[j];
       x[j] = tmp;
       reverse(x, ++i, --j);//Recursive
    }   
}

测试:

int[] s = new int[]{1,2,3,4,5};
reverseArray(s);
System.out.println(Arrays.toString(s));//"5,4,3,2,1"

递归,O(n),不需要临时数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AJAX返回数据保存到一个数组并调用AJAX的该阵列外

单元测试一个方法,该方法调用一个返回实体页面的方法

如何编写一种方法,该方法接受类型为x的数组以及与该数组具有相同类型的另一个变量

最小缓冲区值是多少,这样一个整数数组将以递增顺序排序?

当您调用new []为N个整数分配一个数组时,是否保证该数组将在物理内存中顺序分配?

创建一个返回数组的方法

将一个数组与另一个数组进行排序,然后在该数组中排序

我将如何编写一个函数,该函数接受一个正整数数组并返回数字上的阶乘数组?

给定一个整数数组和一个值N。将N表示为该数组的最小元素数之和。如何解决这个问题?

给定一个整数数组'num'返回该数组加1

给定一个整数数组arr,当且仅当该数组中每个值的出现次数唯一时,编写一个返回true的函数

使用next方法创建一个迭代器,该方法在调用.next时返回数组的每个值

从另一个数组返回一个N个元素的新数组的简便方法,该数组填充了迭代值?香草JavaScript

Hasura中的一个计算字段,该字段返回整数数组

Hasura中的一个计算字段,该字段返回整数数组

pthread启动例程返回一个整数数组

在Java中使用getArray()编写一个返回整数数组的方法

调用方法时从数组返回一个值

创建一个整数数组并以空白结尾

方法内部具有一个整数,每次调用该方法时,该整数都会增加1

制作一个代表整数数组索引的数组

如何在Java中编写一个递归方法来反转存储在整数数组中的值?

如果方法的参数称为tail递归,则该方法是否具有一个方法调用?

编写一个名为“ RollDie”的方法,该方法将返回一个介于1到6之间的整数

我在递归函数中声明了一个数组。我该如何排序?

编写一个接受整数参数的方法,该参数返回数字可以被 2 整除的次数

Swift - 基于另一个称为查询的数组有效地查询一个整数数组,该数组具有第一个数组的索引

如何使用递归编写一个函数,该函数接受 2 个整数并返回一个包含 2 个输入整数之间的整数的数组

接受一个 int 数组和一个值并返回该值在数组中的索引的方法