前言
一、按既定顺序创建目标数组(传送门)
给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:
目标数组 target 最初为空。
按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。
重复上一步,直到在 nums 和 index 中都没有要读取的元素。
请你返回目标数组。题目保证数字插入位置总是存在。
示例 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]
🔑思路:
1.首先遍历函数,其中将下标写为idx,需要插入的值写为ins。
2.如果idx比现在的下标要小的话,则将所有元素向后移动,同时将元素插入到其中。
3.否则就按顺序插入即可
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
//由于需要x对元素进行插入,所以,后面的元素需要往后挪一个位置,数组的插入可以参见顺序表的插入。
//将元素放入待插入位置;
//插入完毕,数组长度势必加—;
int* createTargetArray(int* nums, int numsSize, int* index, int indexSize, int* returnSize){
*returnSize = numsSize;
int* arr = (int*)malloc(sizeof(int)*numsSize);
if(arr == NULL){
return NULL;
}
for(int i = 0; i < numsSize; i++){
int idx = index[i];
int ins = nums[i];
for(int j = i; j > idx; j--){
arr[j] = arr[j-1];
}
arr[idx] = ins;
}
return arr;
}