一、题目
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
二、示例
三、代码
很明显这个直接得到平方的结果,然后使用sort方法重新排序。
public int[] SortedSquares(int[] nums) {
for (int i = 0; i < nums.Length; i++)
{
nums[i] = nums[i] * nums[i];
}
Array.Sort(nums);
return nums;
}
这个是根据学习计划的提示,双指针。
public int[] SortedSquares(int[] nums) {
int n = nums.Length - 1;
int[] ans = new int[nums.Length];
int left = 0, right = 0;
for (int i = 0; i <= n; i++)
{
left = nums[i]*nums[i];
right = int.Parse(Math.Pow(nums[n] * 1.0, 2.0).ToString()); ;
if (left>right)
{
ans[n - i] = left;
}
else
{
ans[n - i] = right;
n--;
i--;
}
}
return ans;
}
分析总结
可能是因为接触的算法太少,看到这道题第一时间想到的就是最简单的那个sort方法。算完直接排序。
根据提示,使用双指针的方法,从两侧同时进行,开头和结尾的平方数必然大于中间的平方数。分别从开头和结尾取平方进行比较,逐渐向中间前进。知道i==n,遍历到同一个数字,算是比较完了。
如果比较是左边的数大,可以直接赋值,进行下一轮比较。
如果是右边的数比较大,就要进行位置控制,将left移回刚才的位置,和右边得到的下一个数比较。