[PHP In Leetcode 977] 有序数组的平方

版权声明:Edited by I Hsien https://blog.csdn.net/POTASSIUM711/article/details/88676802

问题


Given an array of integers A sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order.

给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

示例 1:

输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]

示例 2:

输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]


思路

计划先得到每个成员的平方,再将其排序输出.
sort(Array)
将数组成员按照升序或称非递减序排列.


代码

class Solution {

    /**
     * @param Integer[] $A
     * @return Integer[]
     */
    function sortedSquares($A) {
        $members=count($A);
        for($i=0;$i<$members;$i++)
        {
            $square[$i]=pow($A[$i],2);
        }
        sort($square);
        return $square;
    }
}

性能情况和总结

在这里插入图片描述
代码虽然省事,但是时间上并未达到最佳.观察较为先进的算法,发现有一个新的套路:

class Solution {    function sortedSquares($arr){
        $res = [];
        $count = count($arr);
        $posIndex = 0;
        $negIndex = 0;
        while($posIndex<$count && $arr[$posIndex]<0){
            $posIndex++;
        }
        $negIndex = $posIndex--;
        for($i=0;0<=$posIndex&&$negIndex<$count;$i++){
            $negPow = $arr[$negIndex]*$arr[$negIndex];
            $posPow  = $arr[$posIndex]*$arr[$posIndex];
            if($negPow<$posPow){
                $res[] = $negPow;
                $negIndex++;
            }else{
                $res[] = $posPow;
                $posIndex--;
            }
        }
        while($negIndex<$count){
            $res[] = $arr[$negIndex]*$arr[$negIndex];
            $negIndex++;
        }
        while($posIndex>=0){
            $res[] = $arr[$posIndex]*$arr[$posIndex];
            $posIndex--;
        }
        return $res;
    } }
     

值得学习.

猜你喜欢

转载自blog.csdn.net/POTASSIUM711/article/details/88676802