算法:有序数组的平方(Java版)(java 有序数组)

createh54个月前 (02-01)技术教程45

有序数组的平方

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

示例:

输入: nums = [-4,-1,0,3,10]
输出: [0,1,9,16,100]

暴力解法

Java代码

import java.util.Arrays;

public class Solution {
    public int[] sortedSquares(int[] nums) {
        int n = nums.length;
        int[] result = new int[n];
        
        for (int i = 0; i < n; i++) {
            result[i] = nums[i] * nums[i];
        }
        
        Arrays.sort(result);
        
        return result;
    }
}

时间复杂度

  • 时间复杂度:O(nlogn),其中 n 是数组的长度。这是因为 Arrays.sort() 方法通常使用一种基于归并排序或快速排序的算法,这两种算法的时间复杂度均为 O(nlogn)。

空间复杂度

  • 空间复杂度:O(1),除了输入数组和输出数组外,我们没有使用额外的空间。

双指针法

Java代码

public class Solution {
    public int[] sortedSquares(int[] nums) {
        int n = nums.length;
        int[] result = new int[n];
        
        int left = 0;
        int right = n - 1;
        int index = n - 1; // 从后往前填充结果数组
        
        while (left <= right) {
            int leftSquare = nums[left] * nums[left];
            int rightSquare = nums[right] * nums[right];
            
            if (leftSquare > rightSquare) {
                result[index] = leftSquare;
                left++;
            } else {
                result[index] = rightSquare;
                right--;
            }
            index--;
        }
        
        return result;
    }
}

时间复杂度

  • 时间复杂度:O(n),其中 n 是数组的长度。因为我们只遍历了一次数组。

空间复杂度

  • 空间复杂度:O(1),除了输入数组和输出数组外,我们没有使用额外的空间。

总结

暴力解法简单直观,但时间复杂度较高。双指针法则利用了题目中数组的有序性,以空间换时间,实现了更高效的解决方案。在处理这类问题时,优先考虑是否能利用数据的特性(如有序性)来优化算法。

相关文章

Java数组详解(java数组操作方法)

数组,也叫Array,是由同一种数据类型按照一定的顺序排列的集合,给这个数组起一个名字。是一种数据类型。定义数组,在类型的后面加一个[]定义数组有两种方式①静态初始化 int[] num=new in...

趣味玩转数组:Java中的数组遍历技巧

当涉及到Java语言中的数组遍历和操作,我们可以从基本概念开始,逐步深入,以确保您理解得更全面。我们将覆盖以下主题:数组的基本概念声明和初始化数组数组的遍历常见的数组操作让我们一步一步来讲解这些内容:...

从零开始学Java-006-二维数组(java二维数组的用法)

二维数组二维数组是一种特殊形式的一维数组,二维数组的每一个元素都是一个一维数组声明数组和一维数组一样,在使用数组之前,要先定义数组所属的数据类型,即声明二维数组。声明二维数组一共有两种语法格式。第1种...

刷题力扣349-两个数组的交集(两个数组的交集 ii)

这道题代码随想录用的是哈希数据结构,什么时候用哈希表,哈希表都是用来快速判断一个元素是否出现在集合里,相对于枚举的话,哈希表的时间复杂度只有O(1)。常见的三种哈希结构数组set(集合)map(映射)...

Java使用输出流OutputStream导出Excel遇到的问题及解决方法

这半年一直在参与一个新系统的软件开发,再此期间遇到了一个小小的问题,就是使用原生POI导出Excel时,会生成非Excel格式的文件,而且文件名称也不是设置好的,而是导出的方法名,如下图;不过这种文件...

学习笔记之C#基础——数组和集合(c#数组三种形式)

学习笔记之C#基础——数组和集合 数组是大部分编程语言中都支持的一种数据类型,无论是C语言、C++、C#还是Java。数组是最为常见的一种数据结构,是相同类型的、用一个标识符封装到一起的基本类型数据序...