LeetCode - 1389 - 按既定順序建立目標陣列

lemon_lyue發表於2020-07-07

更多內容關注個人部落格:lemonlyue.github.io/

題目

給你兩個整數陣列 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]

解題

LeetCode給定函式體


class Solution {

    /**

     * @param Integer[] $nums

     * @param Integer[] $index

     * @return Integer[]

     */

    function createTargetArray($nums, $index) {

    }

}

思路

判斷當前陣列位置是否有值, 有值則將值往後移(遞迴思想), 沒有值則插入


class Solution {

    /**

     * @desc 遞迴方法

     * @param Integer[] $nums

     * @param Integer[] $index

     * @return Integer[]

     */

    public $arr = [];

    function createTargetArray($nums, $index) {

        foreach ($index as $key => $item) {

            $this->insert($item, $nums[$key]);

        }

        return $this->$arr;

    }

    /**

     * @desc 插入方法, 判斷當前陣列位置是否有值, 有值則將值往後移, 沒有值則插入

     * @param int $index

     * @param int $num

     */

    function insert($index, $num) {

        if (!isset($this->$arr[$index])) {

            $this->$arr[$index] = $num;

        } else {

            $temp = $this->$arr[$index];

            $this->insert($index + 1, $temp);

            $this->$arr[$index] = $num;

        }

    }

}

結果

使用遞迴方法,雖然說可以實現,但是耗時較長。有更好的解法可以在評論留言。

LeetCode - 1389 - 按既定順序建立目標陣列

LeetCode其他題解

檢視其他大佬分享題解,程式碼如下:


class Solution {

    /**

     * @param Integer[] $nums

     * @param Integer[] $index

     * @return Integer[]

     */

    function createTargetArray($nums, $index) {

        $target = [];

        $_tmp_indexs = [];

        foreach ($index as $i => $k) {

            if (in_array($k, $_tmp_indexs)) {

                foreach ($_tmp_indexs as &$_tmp_index) {

                    if ($_tmp_index >= $k) {

                        $_tmp_index ++;

                    }

                }

            }

            $_tmp_indexs[] = $k;

        }

        foreach ($_tmp_indexs as $i => $k) {

            $target[$k] = $nums[$i];

        }

        ksort($target);

        return $target;

    }

}

思路如下:

將index陣列中的每一項遍歷, 判斷在插入後實際對應的下標位置得到($_tmp_index), 然後通過該對映寫入到結果中。

題解連結:leetcode-cn.com/problems/create-ta...

執行結果如下:

LeetCode - 1389 - 按既定順序建立目標陣列

本作品採用《CC 協議》,轉載必須註明作者和本文連結

lemon_lyue

相關文章