题目
给定一个数组,将其顺序颠倒后输出,例如[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]);
}
}
}