刷题了:977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

news2024/9/22 1:57:27

学习记录,主要参考:代码随想录

977.有序数组的平方

题目链接:https://leetcode.cn/problems/remove-element/
文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP
实现情况:
思路是先对元素进行平方,然后进行排序
int abs(int i) //返回整型参数i的绝对值
int a = pow(4,2);// 4的平方=16
在这里插入图片描述
因为数组是一个非递减顺序 排序的整数数组,所以可以使用双指针方式进行操作
vector a(n+1);// 初始化一个新的数组,并且都初始化为0

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int n = nums.size()-1;
        vector<int> a(n+1);
       for(int h = 0, t = n; h<=t;){
            if(abs(nums[h]) < abs(nums[t])){
                nums[t] = nums[t]*nums[t];
                 a[n--] = nums[t--];
            }else{
                nums[h] = nums[h]*nums[h];
                a[n--] = nums[h++];
            }
        }
        return a;
    }
};

在这里插入图片描述
还可以直接使用快排序 sort(A.begin(), A.end());

class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        for (int i = 0; i < A.size(); i++) {
            A[i] *= A[i];
        }
        sort(A.begin(), A.end()); // 快速排序
        return A;
    }
};

在这里插入图片描述

209.长度最小的子数组

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
文章讲解:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html
视频讲解:https://www.bilibili.com/video/BV1tZ4y1q7XE

实现情况:
解决这道题重要的方法是使用滑动窗口
所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
需要注意如果数组当中没有满足条件的数据的情况,最后返回值的判断很重要
h:表示滑动窗口左边界
t:表示滑动窗口右边界
t++:表示滑动窗口的程度在不断增加,右边界在不断右移
while(sum >= target) //这里使用while 就是不断将滑动窗口右移
t - h + 1 //是计算当前的到的子数组的长度
sum -= nums[h++];//这里是先减去滑动窗口最右边的一个数据,然后将滑动窗口右进一格

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int sum = 0;
        int result_end = INT_MAX;
        for (int h = 0, t = 0; t < nums.size(); t++) {
            sum += nums[t];
            while(sum >= target) {
                result_end = (result_end < t - h + 1) ? result_end : t - h + 1;
                sum -= nums[h++];
            }
        }
        
        return result_end == INT_MAX ? 0 : result_end; 
    }
};

在这里插入图片描述

59.螺旋矩阵II

题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
文章讲解:https://programmercarl.com/0059.%E8%9E%BA%E6%97%8B%E7%9F%A9%E9%98%B5II.html
视频讲解:https://www.bilibili.com/video/BV1SL4y1N7mV/

求解本题依然是要坚持循环不变量原则
模拟顺时针画矩阵的过程:

  • 填充上行从左到右
  • 填充右列从上到下
  • 填充下行从右到左
  • 填充左列从下到上
    由外向内一圈一圈这么画下去
    按照左闭右开的原则
    1、循环的圈数计算:n/2 ,需要注意如果是奇数最后一个数需要添加
    2、确定好每行每列填充的条件,找到变量和不变量

在这里插入图片描述

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        int j= 0,i=0;
        int startx = 0, starty = 0; 
        int offset = 1;
        int count = 1;
        int loop = n/2;
        int mid = n/2;
        vector<vector<int>> b(n, vector<int>(n, 0)); 

       
        while(loop--){
            i = startx;
            j = starty;
            for (j; j < n - offset; j++) {
                b[i][j] = count++;
            }
            for (i; i < n - offset; i++) {
                b[i][j] = count++;
            }
            for(;j> starty;j--){
                b[i][j] = count++;
            }
            for(;i> startx;i--){
                b[i][j] = count++;
            }
            starty++;
            startx++;
            offset += 1;
        }
        if(n%2){
            b[mid][mid] = count; 
        }
        return b;

    }
};

在这里插入图片描述

数组总结

数组是存放在连续内存空间上的相同类型数据的集合。
数组下标都是从0开始的。
数组内存空间的地址是连续的
因为数组在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。
数组的元素是不能删的,只能覆盖。

二分法:
暴力解法时间复杂度:O(n)
二分法时间复杂度:O(logn)

双指针法:
双指针法(快慢指针法):通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
暴力解法时间复杂度:O(n^2)
双指针时间复杂度:O(n)

滑动窗口
暴力解法时间复杂度:O(n^2)
滑动窗口时间复杂度:O(n)
滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置

模拟行为
记住循环不变量原则!

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

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

相关文章

【go】Excelize处理excel表 带合并单元格、自动换行与固定列宽的文件导出

文章目录 1 简介2 相关需求与实现2.1 导出带单元格合并的excel文件2.2 导出增加自动换行和固定列宽的excel文件 1 简介 之前整理过使用Excelize导出原始excel文件与增加数据校验的excel导出。【go】Excelize处理excel表 带数据校验的文件导出 本文整理使用Excelize导出带单元…

签名优化:请求数据类型不是`application/json`,将只对随机数进行签名计算,例如文件上传接口。

文章目录 I 签名进行请求数据类型类型判断1.1 常见的ContentType1.2 签名切面处理1.3 文件上传案例1.4 处理接口信息背景: 文件上传接口的请求数据类型通常为multipart/form-data,方便携带文本域和使用接口文档进行调试。 如果携带JSON数据,不方便调试接口。 前端数据也要特…

如何学习Hadoop:糙快猛的大数据之路(利用GPT 学习)

目录 引言Hadoop是什么&#xff1f;学习Hadoop的"糙快猛"之道1. 不要追求完美&#xff0c;先动手再说2. 从简单的MapReduce开始3. 利用大模型加速学习4. 循序渐进&#xff0c;建立知识体系 构建您的Hadoop技能树1. 夯实基础&#xff1a;Linux和Java2. 深入理解HDFS3.…

Chromium CI/CD 之Jenkins实用指南2024 - 常见的构建错误(六)

1. 引言 在前一篇《Chromium CI/CD 之 Jenkins - 发送任务到Ubuntu&#xff08;五&#xff09;》中&#xff0c;我们详细讲解了如何将Jenkins任务发送到Ubuntu节点执行&#xff0c;并成功验证了文件的传输和回传。这些操作帮助您充分利用远程节点资源&#xff0c;提升了构建和…

收银系统源码-商城下单,门店接单

随着新零售时代的不断进步&#xff0c;线下线上一体化的收银系统&#xff0c;被很多门店越来越重视。用户在线上商城下单后&#xff0c;门店如何接单呢&#xff0c;如何处理订单呢&#xff1f; 1.收银系统开发语言 核心开发语言: PHP、HTML5、Dart后台接口: PHP7.3后合管理网…

【BUG】已解决:note: This is an issue with the package mentioned above,not pip.

已解决&#xff1a;note: This is an issue with the package mentioned above&#xff0c;not pip. 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷…

操作系统发展简史(Unix/Linux 篇 + DOS/Windows 篇)+ Mac 与 Microsoft 之风云争霸

操作系统发展简史&#xff08;Unix/Linux 篇&#xff09; 说到操作系统&#xff0c;大家都不会陌生。我们天天都在接触操作系统 —— 用台式机或笔记本电脑&#xff0c;使用的是 windows 和 macOS 系统&#xff1b;用手机、平板电脑&#xff0c;则是 android&#xff08;安卓&…

1. 个人谈心 ——【如何学习编程及合理安排休息时间】

&#x1f4d6; 声明 ! ! ! 此文章仅仅属于个人思想&#xff0c;如有不满或者意见不相同&#xff0c;可以在评论区讨论留言&#xff0c;非常感谢支持&#xff01;&#xff01;&#xff01; &#x1f495;个人主页&#xff1a;三亿老奶奶心中的梦 &#x1f4d8;收录专栏&#xff…

AI(Adobe lliustrator)教程+软件包

简介&#xff1a; 软件主要应用于印刷出版、海报书籍排版、专业插画、多媒体图像处理和互联网页面的制作等&#xff0c;也可以为线稿提供较高的精度和控制&#xff0c;适合生产任何小型设计到大型的复杂项目。 通常用于创建LOGO(商标或徽标)&#xff0c;图标&#xff0c;插图…

Spring-Boot基础--yaml

目录 Spring-Boot配置文件 注意&#xff1a; YAML简介 YAML基础语法 YAML:数据格式 YAML文件读取配置内容 逐个注入 批量注入 ConfigurationProperties 和value的区别 Spring-Boot配置文件 Spring-Boot中不用编写.xml文件&#xff0c;但是spring-Boot中还是存在.prope…

深入理解CSS基础【代码审计实战指南】

文章目录 为什么需要cssCSS语法CSS的组成css注释&#xff1a; 快速入门示例&#xff1a;常用样式字体颜色和边框颜色介绍颜色示例&#xff1a;边框边框的宽度与高度 字体样式背景样式文本居中 字体颜色和边框颜色介绍颜色示例&#xff1a;边框边框的宽度与高度 字体样式背景样式…

了解PHY,MAC芯片

物理层芯片叫做PHY、数据链路层芯片叫做MAC。 1、MCU内置MAC芯片外部PHY芯片 1.1、PHY PHY在发送数据的时候&#xff0c;收到MAC过来的数据&#xff08;对PHY来说&#xff0c;没有帧的概念&#xff0c;对它来说&#xff0c;都是数据而不管什么地址&#xff0c;数据还是CRC&am…

拖拽上传(预览图片)

需求 点击上传图片&#xff0c;或直接拖拽图片到红色方框里面也可上传图片&#xff0c;上传后预览图片 效果 实现 <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content&…

GIT--git clone fatal [文件过大或网络不稳定] [大型仓库]

GIT--git clone fatal 1 介绍1.1 原因分类1.2 文件过大或网络不稳定 2 分析3 操作3.1 指定克隆深度【浅克隆】3.2 分批次下载3.3 增大Git的HTTP POST缓冲区大小3.4 配置git的最低速度和最低速度时间(单位&#xff1a;秒)3.5 压缩3.6 过滤下载 git filter branch3.7 仅克隆一个分…

Go语言并发编程-Context上下文

Context上下文 Context概述 Go 1.7 标准库引入 context&#xff0c;译作“上下文”&#xff0c;准确说它是 goroutine 的上下文&#xff0c;包含 goroutine 的运行状态、环境、现场等信息。 context 主要用来在 goroutine 之间传递上下文信息&#xff0c;包括&#xff1a;取…

AI发展下的伦理挑战,应当如何应对?

人工智能&#xff08;AI&#xff09;的快速发展带来了许多伦理挑战&#xff0c;如何应对这些挑战是一个复杂而多方面的问题。以下是一些应对策略和建议&#xff1a; 坚持伦理先行原则&#xff1a; 制定科技伦理规范和标准&#xff0c;将伦理规范嵌入人工智能开发、运行等各个阶…

从PyTorch官方的一篇教程说开去(2 - 源码)

先上图&#xff0c;上篇文章的运行结果&#xff0c;可以看到&#xff0c;算法在迭代了200来次左右达到人生巅峰&#xff0c;倒立摆金枪不倒&#xff0c;可以扛住连续200次操作。不幸的是&#xff0c;然后就出现了大幅度的回撤&#xff0c;每况愈下&#xff0c;在600次时候居然和…

web安全之SQL手工注入漏洞测试

一、目的 1.掌握SQL注入原理&#xff1b; Sql注入详解(原理篇)_sql注入攻击的原理-CSDN博客 2.了解手工注入的方法&#xff1b; 3.了解MySQL的数据结构&#xff1b; 4.了解字符串的MD5加解密 二、过程 1.进去后出现以下界面 找注入点 发现有注入点&#xff0c;即id被代入执…

基于X86+FPGA+AI的远程医疗系统,支持12/13代 Intel Core处理器

工控主板&#xff1a;支持12/13代 Intel Core处理器&#xff0c;适用于远程医疗系统 顺应数字化、网络化、智能化发展趋势&#xff0c;国内医疗产业改革正在积极推进&#xff0c;远程医疗、智慧医疗等新模式新业态创新发展和应用&#xff0c;市场空间不断扩大&#xff0c;而基…

24位动态信号采集卡8路同步音频震动信号采集IEPE采集卡USB8814

24位动态信号采集卡 音频震动信号采集USB8814实测演示 品牌&#xff1a;阿尔泰科技 产品概述&#xff1a; USB8814 是一款为测试音频和振动信号而设计的高精度数据采集卡。该板卡提供 8 路同步模拟输 入通道&#xff0c;24bit 分辨率&#xff0c;单通道采样速率zui高 204.8kSP…