LeetCode(Array)1920. Build Array from Permutation

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得到
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值