数组——有序数组的平方

文章目录

题目顺序:代码随想录算法公开课,b站上有相应视频讲解

一、题目

977. Squares of a Sorted Array

Given an integer array nums sorted in non-decreasing order, return an array of the squares of each number sorted in non-decreasing order.

Example 1:

Input: nums = -4,-1,0,3,10

Output: 0,1,9,16,100

Explanation: After squaring, the array becomes 16,1,0,9,100.

After sorting, it becomes 0,1,9,16,100.

Example 2:

Input: nums = -7,-3,2,3,11

Output: 4,9,9,49,121

Constraints:

1 <= nums.length <= 104

-104 <= numsi <= 104

nums is sorted in non-decreasing order.

Follow up: Squaring each element and sorting the new array is very trivial, could you find an O(n) solution using a different approach?

题目来源: leetcode

二、题解

排序写法

cpp 复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0;i < n;i++){
            nums[i] = nums[i] * nums[i];
        }
        sort(nums.begin(),nums.end());
        return nums;
    }
};

双指针写法

cpp 复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int n = nums.size();
        vector<int> res(n,0);
        int index = n - 1;
        for(int i = 0,j = n - 1;i <= j;){
            if(nums[i] * nums[i] > nums[j] * nums[j]){
                res[index--] = nums[i] *nums[i];
                i++;
            }
            else{
                res[index--] = nums[j] * nums[j];
                j--;
            }
        }
        return res;
    }
};
相关推荐
CoderYanger3 小时前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
wyhwust3 小时前
No1-绪论
c++
kiracrimson3 小时前
选择排序与快速排序:一次选极值,一次分区间
算法·排序算法
无名猿3 小时前
C++ 对象内存模型:vtable 布局、多继承 vptr、RTTI 与 dynamic_cast 走查
c++·内存管理·调试技巧·现代c++
All for pursuit.3 小时前
【动态规划-8】152.乘积最大子数组
数据结构·c++·算法·leetcode·动态规划
信奥卷王3 小时前
[GESP202512 六级] 路径覆盖
数据结构·算法
INGNIGHT3 小时前
1861 · 老鼠跳跃(坐标型dp)
数据结构·c++
Lazionr3 小时前
手撕 unordered_set 和 unordered_map,剖析哈希表底层实现
c++·算法
0+1114 小时前
算法 --归并排序
数据结构·算法·排序算法
Run_Teenage4 小时前
算法:树的重心、树的直径
算法