有序数组的平方

//给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
//比如输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100]
分析:也就是数组原先是增序排列,但是有负数,需要计算他们的平方然后重新排序。

//最容易的方式,利用Arrays的sort方法
//直接排序的方式
public int[] sortedSquares(int[] A) {     
    int[] result = new int[A.length];
    int num = 0;
    for(int number:A){
        result[num++] = number*number;
    }
    Arrays.sort(result);
    return result;
}
//通过单调栈实现方式
public int[] sortedSquares(int[] A) {
    int[] result = new int[A.length];
    int num = 0;
    Stack<Integer> stack = new Stack<Integer>();
    for(int i = 0;i<A.length;i++){
        int temp = A[i] * A[i];
        if(stack.size() <= 0 || stack.peek() >= temp){
            stack.add(temp);
        }else{
            while(stack.size() > 0 && stack.peek() < temp){
                result[num++] = stack.peek();
                stack.pop();          
            }
            stack.add(temp); 
        }       	
    }
    while(stack.size() >0){
        result[num++] = stack.pop();
    }
    return result;
}
//双指针的方式
public int[] sortedSquares(int[] A) {     
    int[] result = new int[A.length];
    int index = A.length -1;
    for(int i = 0,j = A.length -1;i<=j;){
        if(A[i] * A[i] < A[j] * A[j]){
            result[index--] = A[j]*A[j];
            j--;
        }else{
            result[index--] = A[i]*A[i];
            i++;
        }
    }
    return result;
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页