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

力扣977.有序数组的平方(双指针)

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

方法一:直接将每个元素的平方压入ans数组中,再对ans数组进行排序

class Solution 
{
public:
    vector<int> sortedSquares(vector<int>& nums) 
    {
        vector<int>ans;
        for(int x:nums)
        {
            ans.emplace_back(x*x);
        }
        sort(ans.begin(),ans.end());
        return ans;
    }
};

方法二:双指针

题目给我们的数组是一个非递减的数组,那么我们可以利用好这个条件减小时间复杂度。

操作方法如下:由于是非递减数组,并且其中可能有负数,那么平方后最大的两个数只有可能是第一个(即负数中最小的那个)和最后一个(即正数中最大的那个)。我们可以想到双指针,一个从前往后,一个从后往前,分别比较指向元素平方后的大小。然后给一个位置指针k,标记要存入的位置。比较后我们将较大的元素存到k这个位置,然后k自减,指向平方后较大的元素的指针就移动一位,重复上述过程

class Solution 
{
public:
    vector<int> sortedSquares(vector<int>& nums) 
    {
        vector<int>ans(nums.size(),0);
        int k=nums.size()-1;
        int i=0,j=k;
        while(i<=j)//要取等,否则若有奇数个元素,中间那个会没有处理
        {
            if(nums[i]*nums[i]<nums[j]*nums[j])
            {
                ans[k--]=nums[j]*nums[j];
                j--;
            }
            else
            {
                ans[k--]=nums[i]*nums[i];
                i++;
            }
        }
        return ans;
    }
};


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

相关文章:

  • 软考中级-数据库-3.2 数据结构-数组和矩阵
  • 安当全栈式PostgreSQL数据库安全解决方案:透明加密、动态凭据与勒索防护一体化实践
  • 制造业中的“大数据”:如何实现精准决策?
  • 重生之我在异世界学编程之C语言:深入预处理篇(上)
  • 千峰React:案例二
  • 【每日学点HarmonyOS Next知识】getContext问题、清除Web缓存、弹层的点击事件透传、去除间隙、侧滑菜单设置
  • 【C++】为什么C++的构造函数不能为虚函数,折钩函数可以为虚函数
  • ChatVLA:基于视觉-语言-动作模型的统一多模态理解与机器人控制
  • python和pycharm安装教程
  • 云服数据存储接口:CloudSever
  • JavaEE_多线程(一)
  • C++中的无锁编程
  • Python Cookbook-3.1 计算昨天和明天的日期
  • 详细分析KeepAlive的基本知识 并缓存路由(附Demo)
  • JavaWeb基础专项复习6(2)——AJAX补充
  • [leetcode]704.二分查找-简单
  • 【Canny 边缘检测详细讲解】
  • 【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
  • 统计URL出现层级及次数
  • 2025-03-04 学习记录--C/C++-C语言 判断是否是素数