面试算法-数组反转

题目

给定一个数组,将其顺序颠倒后输出,例如[1,2,4,8] 输出结果为:[8,4,2,1]。要求时间复杂度O(N),不创建新数组。

解法

定义两个int型变量i、j,分别指向数组的第一个位置和最末位置,两两交换直至i=j或者j-i=1。

import com.ricky.codelab.interview.util.ArrayUtil;

/** * 数组反转 * @author Ricky * */
public class ReverseArray {

    public void reverse(int[] arr){

        if(arr==null || arr.length<=1){
            return;
        }

        int i=0, j=arr.length-1;
        while(i<j){
            ArrayUtil.swap(arr, i, j);
            i++;
            j--;
        }
    }

    public static void main(String[] args) {

        int[] arr = {1, 2,3,4,7,9,8};

        ArrayUtil.printArray(arr);

        new ReverseArray().reverse(arr);

        ArrayUtil.printArray(arr);
    }

}

ArrayUtil.java

public static void swap(int[] arr, int i, int j){
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j]= temp;
}

public static void printArray(int[] arr){
    if(arr==null || arr.length==0){
        return;
    }
    for (int i = 0; i < arr.length; i++) {
           if(i!=arr.length-1){
            System.out.print(arr[i]+" ");
           }else{
            System.out.println(arr[i]);
           }
       }
}

你可能感兴趣的:(算法)