基于排列构建数组
难度:
标签:
题目描述
代码结果
运行时间: 24 ms, 内存: 16.3 MB
/*
题目思路:
1. 使用 Java Stream API 构建数组 ans。
2. 我们可以通过 IntStream.range 创建一个范围流,然后 map 每个元素 i 到 nums[nums[i]]。
3. 最后将流转换成数组即可。
*/
import java.util.stream.IntStream;
public class Solution {
public int[] buildArray(int[] nums) {
// 使用 IntStream 生成 ans 数组
return IntStream.range(0, nums.length) // 生成范围流
.map(i -> nums[nums[i]]) // 映射到对应的 nums[nums[i]]
.toArray(); // 转换为数组
}
}
解释
方法:
这个题解利用了Python的列表推导式来直接创建新数组。对于给定的排列数组 `nums`,题解中通过遍历 `nums` 中的每个元素 `i`,并将 `nums[i]` 作为结果数组 `ans` 的元素。这种方法直接根据题目要求来构建结果数组,即 `ans[i] = nums[nums[i]]`,这里 `i` 是从 `nums` 中直接取得的,表示原数组的下标也是新数组的值。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
在题解中,列表推导式中的循环变量直接使用了nums作为迭代对象,这样做是否合理?通常我们不是应该使用range(len(nums))吗?
▷🦆
题解中未考虑输入数组的有效性,如果输入的nums不符合从0到nums.length-1的排列怎么办?
▷🦆
题解是否考虑了所有可能的边界条件,例如nums为空的情况?
▷