1920. 基于排列构建数组
给你一个 从 0 开始的排列 nums
(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans
,其中,对于每个 i
(0 <= i < nums.length
),都满足 ans[i] = nums[nums[i]]
。返回构建好的数组 ans
。
从 0 开始的排列 nums
是一个由 0
到 nums.length - 1
(0
和 nums.length - 1
也包含在内)的不同整数组成的数组。
示例 1:
输入:nums = [0,2,1,5,3,4] 输出:[0,1,2,4,5,3] 解释:数组 ans 构建如下: ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]] = [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]] = [0,1,2,4,5,3]
示例 2:
输入:nums = [5,0,1,2,3,4] 输出:[4,5,0,1,2,3] 解释:数组 ans 构建如下: ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]] = [nums[5], nums[0], nums[1], nums[2], nums[3], nums[4]] = [4,5,0,1,2,3]
提示:
1 <= nums.length <= 1000
0 <= nums[i] < nums.length
nums
中的元素 互不相同原站题解
rust 解法, 执行用时: 4 ms, 内存消耗: 2 MB, 提交时间: 2023-09-12 15:43:34
impl Solution { pub fn build_array(nums: Vec<i32>) -> Vec<i32> { let mut ans = vec![0; nums.len()]; for i in 0..nums.len() { ans[i] = nums[nums[i] as usize]; } ans } }
rust 解法, 执行用时: 4 ms, 内存消耗: 2.1 MB, 提交时间: 2023-09-12 15:42:58
impl Solution { pub fn build_array(nums: Vec<i32>) -> Vec<i32> { nums.iter().map(|&x| nums[x as usize]).collect() } }
rust 解法, 执行用时: 4 ms, 内存消耗: 1.9 MB, 提交时间: 2023-09-12 15:42:33
impl Solution { pub fn build_array(nums: Vec<i32>) -> Vec<i32> { let mut v = vec![]; for i in 0..nums.len() { // 唯一注意,slice需要usize而不是i32 v.push(nums[nums[i as usize] as usize]); } v } }
cpp 解法, 执行用时: 8 ms, 内存消耗: 16.5 MB, 提交时间: 2023-09-12 15:40:59
class Solution { public: vector<int> buildArray(vector<int>& nums) { int n = nums.size(); vector<int> ans; for (int i = 0; i < n; ++i){ ans.push_back(nums[nums[i]]); } return ans; } };
java 解法, 执行用时: 1 ms, 内存消耗: 43.4 MB, 提交时间: 2023-09-12 15:40:30
class Solution { public int[] buildArray(int[] nums) { int n = nums.length; int[] ans = new int[n]; for (int i=0; i<n; ++i){ ans[i] = nums[nums[i]]; } return ans; } }
php 解法, 执行用时: 32 ms, 内存消耗: 19.1 MB, 提交时间: 2023-09-12 15:39:27
class Solution { /** * @param Integer[] $nums * @return Integer[] */ function buildArray($nums) { $n = count($nums); $ans = array_fill(0, $n, 0); for($i = 0; $i < $n; $i++) { $ans[$i] = $nums[$nums[$i]]; } return $ans; } }
python3 解法, 执行用时: 48 ms, 内存消耗: 16.2 MB, 提交时间: 2023-09-12 15:38:25
class Solution: def buildArray(self, nums: List[int]) -> List[int]: n = len(nums) ans = [0 for _ in range(n)] for i in range(n): ans[i] = nums[nums[i]] return ans
golang 解法, 执行用时: 12 ms, 内存消耗: 6.5 MB, 提交时间: 2021-07-05 10:40:20
func buildArray(nums []int) []int { n := len(nums) ans := make([]int, n) for i, _ := range nums { ans[i] = nums[nums[i]] } return ans }