日拱一卒——LeetCode977.有序数组的平方

大家好呀,今天为大家带来的LeetCode的题目是:LeetCode977.有序数组的平方,这么一道简单题目,题目虽然简单,但是我们可以用几种不同的思路和方法来去实现它。重要的不是解决这个题目,而是学一些算法思想和思路。

题目

image

分析

题目很简单,就算不是一个有序数组,我们可以先算出各个数的平方然后排序即可,但是我们没有使用到题目中有序这个条件,针对这个条件我们可以使用双指针来解决这个问题。

解法一:直接排序

这个方法相对来说比较无脑,就是将数据平方后进行排序

解法二:双指针

由于数组本身就存在有序,而且平方后的最大值,一定处于数组的收尾两端,所以我们就使用双指针分别指向数组的头尾,然后依次比较,绝对值较大者放入输出数组的最后面,然后移动指针依次遍历。

代码实现

解法一:

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和计算机基础知识,保证让你看完有所收获,不信你打我
  • 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。

image

猜你喜欢

转载自blog.csdn.net/issunmingzhi/article/details/109113428