深圳幻海软件技术有限公司 欢迎您!

看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题977有序数组的平方) 2023.4.20

2023-05-23

目录前言算法题(LeetCode977有序数组的平方)—(保姆级别讲解)分析题目算法思想(重要)暴力解法代码:双指针法(快慢指针法)代码:结束语前言本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可,撰写本文章主要目的在于记录自己学习体会并分享给大家,全篇并不仅仅是复制粘贴,更多

目录

    • 前言
    • 算法题(LeetCode 977有序数组的平方)—(保姆级别讲解)
      • 分析题目
      • 算法思想(重要)
        • 暴力解法代码:
        • 双指针法(快慢指针法)代码:
    • 结束语

前言

本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可,撰写本文章主要目的在于记录自己学习体会并分享给大家,全篇并不仅仅是复制粘贴,更多的是加入了自己的思考,希望读完此篇文章能真正帮助到您!!!

算法题(LeetCode 977有序数组的平方)—(保姆级别讲解)

力扣题目链接

分析题目

  1. 该数组为非递减顺序的顺序整数数组
  2. 返回的数组也需要按照非递减顺序排序

算法思想(重要)

这里主要讲解两种算法思想,分别是:

  1. 暴力解法
  2. 双指针法

暴力解法代码:

class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        for (int i = 0; i < A.size(); i++) {
            A[i] *= A[i];
        }
        sort(A.begin(), A.end()); // 快速排序
        return A;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

//时间复杂度是 O(n + nlogn)

暴力算法的算法思想其实很简单,主要是分为两个步骤,分别是:

  1. 先在原有的基础上每个数组元素都进行平方。
  2. 在已经拼房的基础上使用快速排序进行排序即可。

双指针法(快慢指针法)代码:

class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        int k = A.size() - 1;
        vector<int> result(A.size(), 0);
        for (int i = 0, j = A.size() - 1; i <= j;) { // 注意这里要i <= j,因为最后要处理两个元素
            if (A[i] * A[i] < A[j] * A[j])  {
                result[k--] = A[j] * A[j];
                j--;
            }
            else {
                result[k--] = A[i] * A[i];
                i++;
            }
        }
        return result;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

//时间复杂度是 O(n)

为了更能让大家了解暴力解法的算法思想,作者特意画了一张图供大家观看!!!


结束语

如果觉得这篇文章还不错的话,记得点赞 ,支持下!!!

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览46879 人正在系统学习中