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

leetcode数组-有序数组的平方

题目

题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        
    }
};
思路及代码
双指针

题目解析:

  1. 数组非递减,
  2. 元素有正负 -> 元素平方后的结果(新数组)不是有序的
  3. 输出要求:数组非递减,要有序

实现方法: 双指针

  • 指针 i 指向起始位置,指针 j 指向终止位置
  • 定义一个新数组 result,和nums数组大小一样,让 k 指向 result数组的终止位置。
  • 如果 nums[i]*nums[i] > nums[j]* nums[j],则 result[k--] = nums[i] * nums[i]
  • 如果 nums[i]*nums[i] <= nums[j]* nums[j],则 result[k--] = nums[j] * nums[j]
#include <vector>
#include <iostream>
using namespace std;

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int k = nums.size() - 1;
        vector<int> result(nums.size(), 0);
        for(int i = 0, j = nums.size() - 1; i <= j;){
            if(nums[i]*nums[i] > nums[j]* nums[j]){
                result[k] = nums[i] * nums[i];
                k--;
                i++;
            }else{
                result[k] = nums[j]*nums[j];
                k--;
                j--;
            }
        }
        return result;
    }
};
// @lc code=end

void printVector(vector<int>& nums){
    for(int i = 0; i < nums.size(); i++){
        cout << nums[i] << " ";
    }
    cout << endl;
}

int main() {
    Solution obj;
    vector<int> vec = {-4,-3,-1,0,2,3,6,10};
    
    vector<int> res = obj.sortedSquares(vec);

    printVector(res);
}

时间复杂度:O(n)

总结

初始看到要使用双指针,自己以为是使用双指针来交换平方后的两个元素,但正确的代码思路并不是这样的,正确的代码思路更清晰明了

http://www.dtcms.com/a/112357.html

相关文章:

  • 软件工程面试题(二十五)
  • 58.基于springboot老人心理健康管理系统
  • 网络:华为HCIA学习笔记:ICMP协议
  • List结构之非实时榜单实战
  • Nginx配置伪静态,URL重写
  • 通过 ModelScope 下载模型,解决sentence-transformers/all-MiniLM-L6-v2无法下载问题
  • 【leetcode100】数组中的第K个最大元素
  • Scala 面向对象编程总结
  • 【虚拟机VMware】银河麒麟系统虚拟机:网络异常处理
  • FrameWork基础案例解析(四)
  • HTTPS 之fiddler抓包--jmeter请求
  • Dynamics 365 Business Central Subscription Recurring Billing 订阅和分期付款详解
  • winRAR禁止广告弹窗
  • Elixir语言的消息队列
  • 进程和线程的概念及Linux操作
  • 解释区块链技术的应用场景和优势
  • 【实战】如何基于 Python Flask 快速开发一个支持 OpenAI 流式接口的 LLM Server
  • 【MySQL】01.MySQL环境安装
  • O(1) 时间复杂度数据设计题
  • 我考研拟录取=稳了吗?
  • Element-plus弹出框popover,使用自定义的图标选择组件
  • sqlalchemy查询json
  • STM32CubeMX-H7-11-IIC读写MPU6050模块(上)-软件IIC协议的解析、封装,实现基本功能获取MPU6050的ID
  • 结肠镜3D视频数据集-C3VD论文中文版
  • 构建自己的私有 Git 服务器:基于 Gitea 的轻量化部署实战指南
  • 2025年3月 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试
  • 当 “原子” 遇上 “光腔”:量子计算的新舞台
  • 前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标防抖处理、mousemove、debounce()、事件停止触发、超时触发
  • 博途之S7通讯
  • 仿小红书社交源码+及时通讯聊天软件APP源码