问题
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; } }
值得学习.