1.问题
Given a zero-based permutation nums (0-indexed), build an array ans of the same length where ans[i] = nums[nums[i]] for each 0 <= i < nums.length and return it.
A zero-based permutation nums is an array of distinct integers from 0 to nums.length - 1 (inclusive).
Example 1:
Input: nums = [0,2,1,5,3,4]
Output: [0,1,2,4,5,3]
Explanation: The array ans is built as follows:
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]
Example 2:
Input: nums = [5,0,1,2,3,4]
Output: [4,5,0,1,2,3]
Explanation: The array ans is built as follows:
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]
Constraints:
- 1 <= nums.length <= 1000
- 0 <= nums[i] < nums.length
- The elements in nums are distinct.
2.解题思路
方法1:
1.新建一个int[]resutl,长度和nums相等
2.遍历数组,result[i]=nums[nums[i]]
3.返回结果
方法2:
通过数学运算符运算
3.代码
代码1:
class Solution {
public int[] buildArray(int[] nums) {
int result[] = new int[nums.length];//1.新建一个int[]resutl,长度和nums相等
for (int i = 0; i < nums.length; i++) {//2.遍历数组,result[i]=nums[nums[i]]
result[i] = nums[nums[i]];
}
return result;//3.返回结果
}
}
代码2:
class Solution {
public int[] buildArray(int[] nums) {
int n = nums.length;
for(int i=0; i<n; i++){
nums[i] = nums[i] + n*(nums[nums[i]] % n);//这样做是为了将新旧价值保持在一起。
}
for(int i=0; i<n; i++){
nums[i] = nums[i]/n;
}
return nums;
//以 [5,0,1,2,3,4] 为例
// 在此之后 nums[0] 将是 5 + 6*(4%6) = 5 + 24 = 29;
//现在对于下一个索引计算,我们可能需要 num[0] 的原始值,它可以通过 num[0]%6 = 29%6 = 5 获得;
//如果我们只想得到 num[0] 的新值,我们可以通过 num[0]/6 = 29/6 = 4得到
}
}