關於 LeetCode 498: Diagonal Traverse

題目連結

關於LeetCode 498: Diagonal Traverse


我是照著這一篇CPP講解的思路寫的,
可是提交之後到了第28個測試(一個剛好10,000個元素的陣列)會因為超出執行限制時間而出錯:

關於LeetCode 498: Diagonal Traverse

源碼:

class  Solution
{
    /**
     * @param  Integer[][] $matrix
     * @return  Integer[]
     */
    function  findDiagonalOrder($matrix)
    {
        // assume $matrix is a M x N array
        $m = sizeof($matrix);
        $n = sizeof($matrix[0]);
        $result = [];

        for ($diagonal=0; $diagonal <= ($m + $n - 2); $diagonal++) {
            // x + y = diagonal
            for ($i = 0; $i <= $diagonal; $i++) {
                $x = $i;
                $y = $diagonal - $x;

                // reverse the direction when it's even
                if ($diagonal % 2 == 0) {
                    $tmp = $x;
                    $x = $y;
                    $y = $tmp;
                }

                if ($x >= $m || $y >= $n) {
                    continue;
                }
                // https://www.php.net/manual/en/function.array-push.php#83388
                // array_push is slower than array_push
                // array_push($result, $matrix[$x][$y]);
                $result[] = $matrix[$x][$y];
            }
        }

        return  $result;
    }
}

我有試著將比較慢的array_push轉成直接把值塞入陣列裡, 可是一樣會出現Time Limit Exceeded,
當然在本機上執行是會得到正確的結果(不過速度依然偏慢).
本機上的執行環境為docker: php7.3
不知道還有哪邊可以改進速度, 請各位幫幫忙m(_ _)m

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!