网站首页 > 精选教程 正文
有序数组的平方
题目描述:给定一个按非递减顺序排序的整数数组 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),除了输入数组和输出数组外,我们没有使用额外的空间。
总结
暴力解法简单直观,但时间复杂度较高。双指针法则利用了题目中数组的有序性,以空间换时间,实现了更高效的解决方案。在处理这类问题时,优先考虑是否能利用数据的特性(如有序性)来优化算法。
猜你喜欢
- 2025-01-06 ArrayIndexOutOfBoundsException异常分析及解决办法
- 2025-01-06 西门子SCL语言中如何求—任意长度数组的最大值和平均值
- 2025-01-06 Java之数组数据操作之电子邮件地址判断
- 2025-01-06 数组-一文搞定前缀和数组
- 2025-01-06 845. 数组中的最长山脉
- 2025-01-06 Java面试:你了解HashMap吗?
- 2025-01-06 Java里的ArrayList相当于不定长度的数组
- 2025-01-06 python散装笔记——17: 数组
- 2025-01-06 java项目过程中常用的日期计算工具
- 2025-01-06 2022-05-06:给你一个整数数组 arr,请你将该数组分隔为长度最多
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)