leetcode 之 1389. 按既定顺序创建目标数组

119 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

题目描述

1389. 按既定顺序创建目标数组 - 力扣(LeetCode)

给你两个整数数组 numsindex。你需要按照以下规则创建目标数组:

  • 目标数组 target 最初为空。
  • 按从左到右的顺序依次读取 nums[i]index[i],在 target 数组中的下标 index[i] 处插入值 nums[i]
  • 重复上一步,直到在 numsindex 中都没有要读取的元素。

请你返回目标数组。

题目保证数字插入位置总是存在。

 

示例 1:

输入:nums = [0,1,2,3,4], index = [0,1,2,2,1]
输出:[0,4,1,3,2]
解释:
nums       index     target
0            0        [0]
1            1        [0,1]
2            2        [0,1,2]
3            2        [0,1,3,2]
4            1        [0,4,1,3,2]

示例 2:

输入:nums = [1,2,3,4,0], index = [0,1,2,3,0]
输出:[0,1,2,3,4]
解释:
nums       index     target
1            0        [1]
2            1        [1,2]
3            2        [1,2,3]
4            3        [1,2,3,4]
0            0        [0,1,2,3,4]

示例 3:

输入:nums = [1], index = [0]
输出:[1]

提示:

  • 1 <= nums.length, index.length <= 100
  • nums.length == index.length
  • 0 <= nums[i] <= 100
  • 0 <= index[i] <= i

思路分析

设想如果index数组当中连续出现两次下标“4”

第一个下标“4”会使result数组中下标“4”位置填充一个元素

当第二个下标“4”执行时,它会把之前执行过的

所有大于等于下标“4”的元素后移一位

所以不如先把index数组中的下标值处理一遍:

依次判断当前下标值是否小于等于之前的下标值

如果是,将大于等于此下标值的下标值+1

这样会得到的index数组会是一个自然数数组[0,index.length-1]

然后依次填充元素即可

AC 代码

class Solution {
   public int[] createTargetArray(int[] nums, int[] index) {
      int[] res=new int[nums.length];
      for (int i = 0; i < index.length; i++) {
         for (int j = 0; j < i; j++) {
            if(i==j) continue;
            if(index[i]<=index[j]){
               index[j]++;
            }
         }
      }
      for (int i = 0; i < res.length; i++) {
         res[index[i]]=nums[i];
      }
      return res;
   }
}

参考

1389. 按既定顺序创建目标数组(最简单代码) - 按既定顺序创建目标数组 - 力扣(LeetCode)