当前位置: 首页 > article >正文

977. 有序数组的平方 C++

文章目录

  • 一、题目链接
  • 二、参考代码
  • 三、所思所悟


一、题目链接

链接: 977. 有序数组的平方


二、参考代码

简单思路:赋值给新的数组然后排序

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int>out;
        for(int i=0;i<nums.size();i++)
        {
            int in = nums[i]*nums[i];
            out.push_back(in);
        }
        sort(out.begin(),out.end());
        return out;

    }
};

新思路:双指针,一个指针从数组的开始,另一个指针从数组的末尾,比较两个指针对应的元素的绝对值,然后将较大的那个元素的平方放到结果数组的末尾,然后移动指针,直到两个指针相遇。这样可以保证结果数组是有序的,并且时间复杂度为 O(n)。

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int n = nums.size();
        vector<int> out(n, 0);
        int left = 0, right = n - 1, pos = n - 1;
        
        while (left <= right) {
            if (abs(nums[left]) > abs(nums[right])) {
                out[pos] = nums[left] * nums[left];
                left++;
            } else {
                out[pos] = nums[right] * nums[right];
                right--;
            }
            pos--;
        }
        
        return out;
    }
};

三、所思所悟

提供的双指针法适用于非递减数组,因为它依赖于绝对值较大的数在数组的两端这一特性。
如果数组不是非递减的,我们需要使用不同的方法来确保结果数组是有序的。

对于任意数组,我们仍然可以使用排序的方法,但是需要先对数组中的每个元素进行平方,然后再进行排序。这种方法的时间复杂度是 O(n^2) 的操作加上 O(n log n) 的排序操作,即 O(n log n)。


http://www.kler.cn/a/429520.html

相关文章:

  • 为深度学习创建PyTorch张量 - 最佳选项
  • Elasticsearch技术标准解析与实践案例
  • kafka原理和实践
  • 金融项目实战 02|接口测试分析、设计以及实现
  • R语言的数据库编程
  • 逻辑测试题
  • ue5 motion matching
  • 前缀和:JAVA
  • MySQL(库的操作)
  • React Native之升级React Navigation v3-v4
  • 物流,驶入AI下半场
  • Master EDI 项目需求分析
  • 在IDEA中使用Git进行版本控制
  • 一款基于开源路径规划引擎的交通可达性计算软件
  • Python 读取 Excel 表格并导出为 DBF 文件
  • 【JAVA】Java项目实战—项目选择(Web应用、命令行工具等)
  • uniapp radio-group实现点击radio选项后的文字选中选项
  • 人工智能的时代,如何拥抱人工智能,我们该何去何从?
  • Idea实现定时任务
  • Spark架构及运行流程
  • 【源码解读】SpringMMVC执行流程
  • 教程|使用Conda安装AlphaFold3-个人记录以及遇到的问题
  • CLIP论文提炼与代码实战
  • node.js 环境配置
  • leetcode207:课程表
  • C#的基本类型,一篇很基础的文章