概要
題目來源鏈接:https://leetcode-cn.com/problems/create-target-array-in-the-given-order/
難度:簡單
類型:數組
題目
給你兩個整數數組 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]
示例 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
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/create-target-array-in-the-given-order
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
分析
將要插入的元素的索引即index[i]與nums數組的下標相比較,如果index[i]等於nums數組的下標則意味着該位置是空的,沒有元素插入,可以直接進行插入元素,如果不等於的話意味着該處位置已經有元素了,按照題意,需要將元素及後面的元素向後挪動一個位置,然後將空出來的這個插入元素。
代碼
Java代碼
/**
* 按既定順序創建目標數組
*
* @param nums 數組
* @param index 索引數組
* @return 返回目標數組
*/
public int[] createTargetArray(int[] nums, int[] index) {
// 創建一個目標數組
int[] target = new int[nums.length];
for (int i = 0; i < nums.length; i++) {// 循環遍歷nums數組的所有元素
if (i != index[i]) {// 注意:如果nums[i]元素的下標不等於index[i]中的值,那麼必然是有元素佔了已有下標的元素位置,所以需要將該下標後面的元素都向後移動一位
for (int j = target.length - 1; j > index[i]; j--) {// 將元素向後移動一個位置
target[j] = target[j - 1];
}
target[index[i]] = nums[i];// 然後纔將空下來的位置置爲nums[i]的元素
} else {// 如果不相等,意味着該處位置還沒有放入元素,可以直接放入元素
target[index[i]] = nums[i];
}
}
return target;
}