大家好呀,今天为大家带来的LeetCode的题目是:LeetCode977.有序数组的平方,这么一道简单题目,题目虽然简单,但是我们可以用几种不同的思路和方法来去实现它。重要的不是解决这个题目,而是学一些算法思想和思路。
题目
分析
题目很简单,就算不是一个有序数组,我们可以先算出各个数的平方然后排序即可,但是我们没有使用到题目中有序这个条件,针对这个条件我们可以使用双指针来解决这个问题。
解法一:直接排序
这个方法相对来说比较无脑,就是将数据平方后进行排序
解法二:双指针
由于数组本身就存在有序,而且平方后的最大值,一定处于数组的收尾两端,所以我们就使用双指针分别指向数组的头尾,然后依次比较,绝对值较大者放入输出数组的最后面,然后移动指针依次遍历。
代码实现
解法一:
public int[] sortedSquares(int[] A) {
int[] ans = new int[A.length];
for (int i = 0; i < A.length; ++i) {
ans[i] = A[i] * A[i];
}
Arrays.sort(ans);
return ans;
}
解法二:
public int[] sortedSquares(int[] A) {
int length=A.length;
int temp=length-1;
int[] ans = new int[length];
for(int i=0,j=length-1;i<=j;){
if(Math.abs(A[i])>Math.abs(A[j])){
ans[temp]=(int)Math.pow(A[i],2);
i++;
temp--;
}else{
ans[temp]=(int)Math.pow(A[j],2);
j--;
temp--;
}
}
return ans;
}
最后
- 如果觉得看完有收获,希望能给我点个赞,这将会是我更新的最大动力,感谢各位的支持
- 欢迎各位关注我的公众号【java冢狐】,专注于java和计算机基础知识,保证让你看完有所收获,不信你打我
- 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。