数组理论基础:有序数组的平方(6月8日)

36 阅读1分钟

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:

  • 输入:nums = [-4,-1,0,3,10]
  • 输出:[0,1,9,16,100]
  • 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]

示例 2:

  • 输入:nums = [-7,-3,2,3,11]
  • 输出:[4,9,9,49,121]

方法1:暴力法

class Solution {
    public int[] sortedSquares(int[] nums) {
        //暴力法:
            //先平方
            for(int i = 0;i < nums.length;i++){
                nums[i] = nums[i] * nums[i];
            }
            //后排序,这里使用ArrayList
            List<Integer> array =new ArrayList<>();
            for(int n : nums) {
                array.add(n);
            }
            Collections.sort(array);
            
            // 转换为数组并返回
            int[] result = new int[array.size()];
            for (int i = 0; i < array.size(); i++) {
                result[i] = array.get(i);
            }
            return result;


    }
}

方法二:双指针

class Solution {
    public int[] sortedSquares(int[] nums) {
        int k = nums.length-1;
            int[] result = new int[nums.length];
            int i = 0;
            int j = nums.length-1;
            while(i<=j){
                if(nums[i]*nums[i] >= nums[j]*nums[j]){
                    result[k] = nums[i]*nums[i];
                    k--;
                    i++;
                }
                else{
                    result[k] = nums[j]*nums[j];
                    k--;
                    j--;
                }
            }
            return result;

    }
}