根据给定数字划分数组
难度:
标签:
题目描述
代码结果
运行时间: 68 ms, 内存: 31.4 MB
/*
* 题目思路:
* 1. 使用Java Stream来处理数组,将元素分为小于、等于和大于pivot的三个部分。
* 2. 将这三个部分合并成一个最终结果。
*/
import java.util.Arrays;
import java.util.stream.Collectors;
public class Solution {
public int[] pivotArray(int[] nums, int pivot) {
// 使用stream过滤和收集不同条件的元素
int[] less = Arrays.stream(nums).filter(n -> n < pivot).toArray();
int[] equal = Arrays.stream(nums).filter(n -> n == pivot).toArray();
int[] greater = Arrays.stream(nums).filter(n -> n > pivot).toArray();
// 合并结果
return Arrays.stream(new int[][]{less, equal, greater})
.flatMapToInt(Arrays::stream)
.toArray();
}
}
解释
方法:
该题解使用了三个列表:less、equal 和 greater,来分别存储小于、等于和大于给定枢轴(pivot)的元素。通过遍历输入数组 nums,将每个元素分类后放入相应的列表。最后,将这三个列表依次合并,以得到符合题目要求的数组,其中小于 pivot 的元素在前,等于 pivot 的元素在中间,大于 pivot 的元素在后,同时保留了各自元素的相对顺序。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
在实现pivotArray方法时,是否有考虑到nums数组为空的情况?如何处理这种情况?
▷🦆
对于具有重复元素的数组,这种分类方法是否会保持重复元素的相对顺序不变?
▷🦆
如果pivot值在数组nums中不存在,这个算法的处理方式是否有任何特殊之处?
▷🦆
这种分类方法在遇到极端不均匀的数据(例如大多数元素都小于或大于pivot)时的表现如何?
▷