【代码随想录】算法训练营 第二天 第一章 数组 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. 长度最小的子数组

相关推荐
数据皮皮侠11 分钟前
1095 《中国城市统计年鉴》面板数据整理
大数据·数据库·人工智能·算法·制造
寒月小酒15 分钟前
3.26 OJ
数据结构·算法
汉克老师22 分钟前
GESP5级C++考试语法知识(十二、递归算法(二))
c++·算法·记忆化搜索·时间复杂度·递归算法·gesp5级·gesp五级
lcreek22 分钟前
计算机网络与图算法:从理论到实践
算法·
sinat_2554878124 分钟前
JSON·学习笔记
java·开发语言·笔记·算法
Yupureki31 分钟前
《算法竞赛从入门到国奖》算法基础:动态规划-基础线性dp
c语言·开发语言·算法·动态规划
Roselind_Yi41 分钟前
从线性回归实战到Python依赖安装踩坑:我的机器学习入门排雷记
笔记·python·算法·机器学习·回归·线性回归·学习方法
黑眼圈子1 小时前
牛客刷题记录5
java·开发语言·学习·算法
罗湖老棍子1 小时前
【例 2】A Simple Problem with Integers(信息学奥赛一本通- P1548)
数据结构·算法·线段树·区间修改 区间查询
abant21 小时前
leetcode 148 排序链表 归并终极形态
算法·leetcode·链表