LeetCode(Array)1920. Build Array from Permutation

快来打我* 2023-09-23 21:58 154阅读 0赞

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:

  1. class Solution {
  2. public int[] buildArray(int[] nums) {
  3. int result[] = new int[nums.length];//1.新建一个int[]resutl,长度和nums相等
  4. for (int i = 0; i < nums.length; i++) {
  5. //2.遍历数组,result[i]=nums[nums[i]]
  6. result[i] = nums[nums[i]];
  7. }
  8. return result;//3.返回结果
  9. }
  10. }

代码2:

  1. class Solution {
  2. public int[] buildArray(int[] nums) {
  3. int n = nums.length;
  4. for(int i=0; i<n; i++){
  5. nums[i] = nums[i] + n*(nums[nums[i]] % n);//这样做是为了将新旧价值保持在一起。
  6. }
  7. for(int i=0; i<n; i++){
  8. nums[i] = nums[i]/n;
  9. }
  10. return nums;
  11. //以 [5,0,1,2,3,4] 为例
  12. // 在此之后 nums[0] 将是 5 + 6*(4%6) = 5 + 24 = 29;
  13. //现在对于下一个索引计算,我们可能需要 num[0] 的原始值,它可以通过 num[0]%6 = 29%6 = 5 获得;
  14. //如果我们只想得到 num[0] 的新值,我们可以通过 num[0]/6 = 29/6 = 4得到
  15. }
  16. }

发表评论

表情:
评论列表 (有 0 条评论,154人围观)

还没有评论,来说两句吧...

相关阅读