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

算法:有序数组的平方(Java版)有序数组的平方题目描述 给定一个按非递减顺序排序的整数数组 nums 返回每个数字的平方组成的新数组 要求也按非递减顺序排序 示例 输入 nums 4 1 0 3 10 输出 0 1 9 16 100 暴力解法 Java 代码 i

欢迎大家来到IT世界,在知识的湖畔探索吧!

有序数组的平方

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

示例:

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

欢迎大家来到IT世界,在知识的湖畔探索吧!

暴力解法

Java代码

欢迎大家来到IT世界,在知识的湖畔探索吧!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),除了输入数组和输出数组外,我们没有使用额外的空间。

总结

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/142553.html

(0)
上一篇 26分钟前
下一篇 16分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信