栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

五月集训——Day3:977

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

五月集训——Day3:977

文章目录
    • ***、题目链接
    • 一、题目
      • 1、题目描述
      • 2、基础框架
    • 二、解题报告
      • 1、思路分析
      • 2、时间复杂度
      • 3、代码详解
    • 三、写在最后

***、题目链接

        Day3:Leetcod 977. 有序数组的平方

一、题目 1、题目描述

        给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

        样例输入: nums = [-4,-1,0,3,10];
        样例输出: [0,1,9,16,100]。
        解       释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]。

2、基础框架
  • C++给出的代码框架如下:
class Solution {
public:
    vector sortedSquares(vector& nums) {
    }
};

二、解题报告 1、思路分析

       ( 1 ) (1) (1) 由于先平方使用 sort 函数,其时间复杂度为 O ( n l o g n ) O(nlog_n) O(nlogn​) ,要实现 O ( n ) O(n) O(n) ,需要使用双指针;
       ( 2 ) (2) (2) 定义两个指针,一个从前遍历,一个从后遍历,比较其平方的大小,将大的存放到新建的字符串末尾;

2、时间复杂度

       O ( n ) O(n) O(n) , n n n 为字符串长度;

3、代码详解
class Solution {
public:
    vector sortedSquares(vector& nums) {
        int left, right;
        int n = nums.size() - 1;
        vector ret(n + 1);
        for(int i = 0, j = n, pos = n; i <= j;){
            left = nums[i] * nums[i];
            right = nums[j] * nums[j];

            if(left > right){
                ret[pos] = left;
                ++i;
            } else {
                ret[pos] = right;
                --j;
            }
            --pos;
        }

        return ret;
    }
};

三、写在最后

          当我们发现使用库函数的时候无法达到应有的时间复杂度,我们应该想办法在内部自己实现该函数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862435.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号