【代码随想录】算法训练营 第二天 第一章 数组 Part 2

977. 有序数组的平方

题目

暴力解法

思路

原地更新所有数组元素为其平方数后,再使用sort函数排序,对vector使用sort函数时,两个参数分别是vector的起始元素和终止元素。

代码

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

双指针法

思路

从题目中我们可以知道,数组元素有正有负,从小到大排序,但是平方以后,元素大小的分布就变成了两边大中间小;

基于此,我们使用双指针法来代替sort函数,双指针在归并排序里就用到了,但在这里,两个指针不是指着两个数组,而是指着输入数组的两端,每次比较两端元素的大小,将较大元素放在新数组里(新数组用vector定义一个和原数组内容一样的,新数组的指针每次向左移动一位),然后指针向内移动一位,直到两个指针相遇。

代码

cpp 复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int i = 0, j = nums.size() - 1, k = nums.size() - 1;
        vector<int> num = nums;
        while (i <= j) {
            if(fabs(nums[i]) >= fabs(nums[j]))
                num[k--] = nums[i] * nums[i++];
            else
                num[k--] = nums[j] * nums[j--];
        }
        return num;
    }
};

209. 长度最小的子数组

相关推荐
CHEEVEN_QY7 分钟前
热仿真在液冷板设计中的应用价值与局限性客观评估
人工智能·算法
无忧.芙桃14 分钟前
图的精髓:邻接矩阵与遍历全解析
c++·算法·面试·深度优先·广度优先
Nil20817 分钟前
leetcode 1143最长公共子序列
算法·leetcode·职场和发展
脚踏实地,坚持不懈!19 分钟前
Linux 内存回收机制:水位线、kswapd 与 Direct Reclaim
linux·jvm·算法
Logic10128 分钟前
C语言/数据结构动态规划题解:字符串变回文的最少操作次数——最长回文子序列(LPS)
c语言·数据结构·算法·动态规划·时间复杂度·回文串·最长回文子序列
UIU1141 小时前
P1115 最大子段和
c++·算法
垆边人似月.1 小时前
华为题:零钱兑换
算法·华为
Logic1011 小时前
C语言/数据结构组合数学题解:数字好排列计数——质数倍数分类与阶乘取模
c语言·数据结构·算法·组合数学·时间复杂度·排列·取模运算
碧海银沙音频科技研究院1 小时前
炬芯ATS3089智能手表烧录方法
人工智能·驱动开发·嵌入式硬件·算法
维克兜率天2 小时前
【维克】统计套利:寻找市场的“定价误差“
人工智能·python·算法