随想录一刷·数组part2

news2025/2/22 11:11:33

在这里插入图片描述

你好,我是安然无虞。

文章目录

  • 1. 有序数组的平方
  • 2. 长度最小的最数组
  • 3. 螺旋数组II

1. 有序数组的平方

有序数组的平方

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) 
    {
        int n = nums.size();

        // 以0为分割线的话,可以将该数组分成两个子数组,并且都是有序的
        // 直接将双指针分别初始化在 nums 的开头和结尾,相当于合并两个从大到小排序的数组
        // 这时我们就可以利用合并两个有序数组的方法解决本题了
        int i = 0, j = n - 1; // 头和尾
        int p = n - 1;
        vector<int> res(n);
        
        while(i <= j)
        {
            // 比较绝对值大小
            if(abs(nums[i]) < abs(nums[j]))
            {
                res[p] = nums[j] * nums[j];
                j--;
            }
            else
            {
                res[p] = nums[i] * nums[i];
                i++;
            }
            p--;
        }

        return res;
    }
};

类似题目:

  1. 合并两个有序数组
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) 
    {
        // 从后向前遍历,因为需要将结果存放到nums1中,从前向后会覆盖原始数据
        int i = m - 1, j = n - 1; 
        int p = nums1.size() - 1;

        while(i >= 0 && j >= 0)
        {
            // 此时有点类似合并两个有序链表的思路
            if(nums1[i] > nums2[j])
            {
                nums1[p] = nums1[i];
                i--;
            }
            else
            {
                nums1[p] = nums2[j];
                j--;
            }
            p--;
        }

        // 因为本身就是将结果存放到nums1中的,所以只需要考虑nums2中剩余的元素
        while(j >= 0)
        {
            nums1[p] = nums2[j];
            j--;
            p--;
        }
    }
};
  1. 合并两个有序链表
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) 
    {
        // 因为合并两个有序链表会生成一条新链表,所以定义虚拟头节点会更简单
        ListNode* newnode = new ListNode(-1), *p = newnode;
        ListNode* p1 = list1, *p2 = list2;

        while(p1 != nullptr && p2 != nullptr)
        {
            if(p1->val < p2->val)
            {
                p->next = p1;
                p1 = p1->next;
            }
            else
            {
                p->next = p2;
                p2 = p2->next;
            }

            p = p->next;
        }    

        if(p1 != nullptr)
            p->next = p1;

        if(p2 != nullptr)
            p->next = p2;

        return newnode->next;
    }
};
  1. 分隔链表
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* partition(ListNode* head, int x) 
    {
        // 相当于生成了两条链表,一条中元素都小于x,另一条元素都不小于x
        ListNode* newnode1 = new ListNode(-1), *p1 = newnode1;
        ListNode* newnode2 = new ListNode(-1), *p2 = newnode2;
        ListNode* p = head;

        while(p != nullptr)
        {
            if(p->val < x)
            {
                p1->next = p;
                p1 = p1->next;
            }
            else
            {
                p2->next = p;
                p2 = p2->next;
            }
            
            p = p->next;
        }

        // 将链表2链接到链表1的末尾,记住别忘了将链表2的尾指向空
        p1->next = newnode2->next;
        p2->next = nullptr;

        return newnode1->next;
    }
};

2. 长度最小的最数组

长度最小的子数组

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) 
    {
        // 因为是正整数数组,没有负数,所以本题可以采用滑动窗口解题
        int left = 0, right = 0;
        int windowSum = 0; // 滑动窗口内的子数组和
        int res = INT_MAX;

        while(right < nums.size())
        {
            windowSum += nums[right];

            right++;

            // 判断左侧窗口什么时候收缩
            while(windowSum >= target && left < right)
            {
                // 更新结果
                res = min(res, right - left);

                windowSum -= nums[left];

                left++;
            }
        }

        return res == INT_MAX ? 0 : res;
    }
};

3. 螺旋数组II

螺旋数组II

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) 
    {
        vector<vector<int>> res(n, vector<int>(n));
        int num = 1;
        int upper_bound = 0, lower_bound = n - 1; // 上下边界
        int left_bound = 0, right_bound = n - 1;  // 左右边界

        while(num <= n * n) // num
        {
            // 上边界,从左往右遍历比较
            if(upper_bound <= lower_bound)
            {
                for(int i = left_bound; i <= right_bound; i++)
                {
                    res[upper_bound][i] = num++; // 后置++
                }
                // 上边界下移
                upper_bound++;
            }

            // 右边界,从上向下遍历比较
            if(left_bound <= right_bound)
            {
                for(int i = upper_bound; i <= lower_bound; i++)
                {
                    res[i][right_bound] = num++;
                }
                // 右边界左移
                right_bound--;
            }

            // 下边界,从右往左遍历比较
            if(upper_bound <= lower_bound)
            {
                for(int i = right_bound; i >= left_bound; i--)
                {
                    res[lower_bound][i] = num++;
                }
                // 下边界上移
                lower_bound--;
            }

            // 左边界,从下向上遍历比较
            if(left_bound <= right_bound)
            {
                for(int i = lower_bound; i >= upper_bound; i--)
                {
                    res[i][left_bound] = num++;
                }
                // 左边界右移
                left_bound++;
            }
        }

        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GoLang忽略文件夹

一、忽略 在使用GoLang开发的过程中&#xff0c;我们可能在搜索查找时&#xff0c;需要屏蔽一些日志文件或者编译文件&#xff0c;基于这样的需求&#xff0c;我们可以在GoLang编辑器中右键选择对应的文件夹-》Mark Directory as-》Ecluded。 这样就可以忽略掉对应的文件夹。 …

Django中的FBV和CBV

一、两者的区别 1、在我们日常学习Django中&#xff0c;都是用的FBV&#xff08;function base views&#xff09;方式&#xff0c;就是在视图中用函数处理各种请求。而CBV&#xff08;class base view&#xff09;则是通过类来处理请求。 2、Python是一个面向对象的编程语言…

【Linux】Linux项目部署及更改访问端口号和jdk、tomcat、MySQL环境搭建的配置安装

目录 一、作用 二、配置 1、上传安装包 2、jdk 2.1、解压对应安装包 2.2、环境变量搭建 3、tomcat 3.1、解压对应安装包 3.2、启动 3.3、设置防火墙 3.4、设置开发端口 4、MySQL 三、后端部署 四、Linux部署项目 1、单体项目 五、修改端口访问 1、进入目录 2…

IOS渲染流程之RenderServer处理图层信息

先来回顾一下Android的渲染史&#xff1a; Android的渲染史&#xff1a; Android4.0之前绘制是在主线程执行的&#xff0c;4.0之后除了引入Vsync和双缓冲还引入了单独处理绘制的RenderServer线程。在draw中保存记录绘制指令&#xff0c;稍后RenderServer会取出绘制指令进行调…

MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)

目录 介绍 特点 基本语法 创建 调用 查看 删除 示例 介绍 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理…

快速入手maven

文章目录 Maven介绍Maven安装和配置基于IDEA的Maven工程创建梳理Maven工程GAVP属性Idea构建Maven JavaSE工程Idea构建Maven JavaEE工程1. 手动创建2. 插件方式创建 Maven工程项目结构说明Maven核心功能依赖和构建管理依赖传递和冲突依赖导入失败场景和解决方案扩展构建管理和插…

只需 4 个简单步骤即可为您的 ML 系统充电

使用 DALL 生成的图像。D-R型 一、说明 这篇文章将带您了解我通过 4 个简单步骤优化任何 ML 系统以进行闪电般快速的训练和推理的过程。 想象一下&#xff1a;你终于被安排在一个很酷的新ML项目中&#xff0c;你正在训练你的经纪人计算一张照片中有多少只热狗&#xff0c;它的成…

任正非说:人家问我:“你怎么一天到晚游手好闲?”我说我是管长江的堤坝的。

你好&#xff01;这是华研荟【任正非说】系列的第26篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 一、我们不是靠人来领导这个公司&#xff0c;我们用规则的确定性来对付结果的不确定。人家问我&#xff1a;“你怎么一天到晚游…

NEWSTART2022 web week1

01HTTP flag{f1cb35f5-05de-4559-8f99-28e1f11df403} 02Head?Header! 或者xxf头:localhost 03我真的会谢 这个题目比之前有意思多了 可知是vim缓存&#xff0c;利用vim缓存知识&#xff1a; 使用vim时会创建临时缓存文件&#xff0c;关闭vim时缓存文件则会被删除。vim异常…

亚马逊云科技:让生成式AI真正走向普惠

伴随着ChatGPT的横空出世&#xff0c;生成式AI&#xff08;Artificial Intelligence Generated Content&#xff0c;也称AIGC&#xff09;大潮也以锐不可当之势席卷全球。从各行各业的商业领袖&#xff0c;到千千万万的程序员和开发者&#xff0c;都在思考如何借助生成式AI技术…

Leetcode刷题详解——两两交换链表中的节点

1. 题目链接&#xff1a;24. 两两交换链表中的节点 2. 题目描述&#xff1a; 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 …

vue自定义组件:中线分割拖动盘

在GitHub上可以找到类似的组件&#xff0c;比如4年前发布的vue2版本的 Vue Split Pane&#xff0c; 但是我还是自己写了一个类似的&#xff1a; 组件效果&#xff1a; 特点&#xff1a; 不是照抄别人的。同时支持vue2、vue3&#xff08;组件内部使用选项式API风格&#xff09…

【JavaScript保姆级教程】switch分支与while循环

文章目录 前言一、Switch分支1.1 switch基本结构1.2 break语句1.3 default标签1.4 下面是几个Switch分支的示例代码&#xff1a;示例1: 根据星期数输出对应的中文星期名称示例2: 根据用户输入的颜色选择执行不同的操作 二、While循环&#xff1a;2.1 while循环基本格式2.2 cont…

学习性能测试线路图

性能测试学习线路图(建议) 1、概览 纵向划分3颗子树:vugen,controller,monitor。优先学习vugen脚本开发以及调试。 横向划分为2层&#xff1a;基础知识以及高级应用。 2、基础知识 2.1、Loadrunner工具使用 2.1.1、建议学习路径 Vugen开发脚本&#xff08;函数使用&#x…

2.2 - 网络协议 - IP协议,IP地址划分,报文格式,数据分片,抓包实战

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 IP协议 1、IP地址划分2、IP协议报文格式3、IP协议数…

Git(七).git 文件夹瘦身,GitLab 永久删除文件

目录 一、问题背景二、问题复现2.1 新建项目2.2 上传大文件2.3 上传结果 三、解决方案3.1 GitLab备份与还原1&#xff09;备份2&#xff09;还原 3.2 删除方式一&#xff1a;git filter-repo 命令【推荐】1&#xff09;安装2&#xff09;删除本地仓库文件3&#xff09;重新关联…

图的广度优先遍历的单源路径、无权图的最短路径问题、BFS性质附Java代码

目录 使用BFS求解单源路径问题 BFS重要性质 无权图的最短路径问题 使用BFS求解单源路径问题 import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.Queue;public class SingleSourcePath {private Graph G;private i…

Greenplum管理和监控工具-gpcc-web介绍

Greenplum管理和监控工具-gpcc-web介绍 1. gpcc-web简介 ​ gpcc&#xff08;Greenplum Command Center&#xff09;的Web用户界面是一个强大的工具&#xff0c;它可以帮助用户管理Greenplum数据库集群&#xff0c;提高效率&#xff0c;优化性能&#xff0c;并确保数据的安全…

安防监控项目---Cortex-A9和zigbee传感器数据上传至网页

文章目录 前言一、A9平台数据的采集与上传二、共享内存上传数据到CGI三、设备代码总结 前言 书接上期&#xff0c;我们大概来梳理一下&#xff0c;已经完成的需求有哪些了&#xff0c;从html下发指令控制Cortex-A9平台硬件&#xff0c;其中主要实现的有控制LED,蜂鸣器&#xf…

AI大模型时代网络安全攻防对抗升级,瑞数信息变革“下一代应用与数据安全”

AI与大模型技术加速普及&#xff0c;安全领域也在以创新视角聚焦下一代应用安全WAAP变革&#xff0c;拓展新一代数据安全领域。近日瑞数信息重磅发布了瑞数全新API扫描器、API安全审计、数据安全检测与应急响应系统及分布式数据库备份系统四大新品。此次发布在延续瑞数信息Bot自…