代码随想录算法训练营第二天|LeetCode 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II

news2025/7/27 20:30:23

LeetCode 977.有序数组的平方

题目链接:977.有序数组的平方

思路:
1、先对每个数进行遍历平方,并插入新的容器中
2、对容器进行排序,返回就可以了

缺陷:开辟了新的容器空间

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> v;
        for (int i = 0; i < nums.size(); i++) {
            v.push_back(pow(nums[i],2));
        }
        sort(v.begin(), v.end());
        return v;
    }
};

在这里插入图片描述
思路:
写此博客的过程中,突然想到我为什么还要重新开辟容器空间,直接在原数据上进行操作不就好了嘛,然后直接改了代码,这就没有额外的内存消耗了。
1、直接对原数据进行平方并进行替换
2、对容器进行排序,返回就可以了

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        for (int i = 0; i < nums.size(); i++) {
            nums[i] = pow(nums[i],2);
        }
        sort(nums.begin(), nums.end());
        return nums;
    }
};

在这里插入图片描述

LeetCode 209.长度最小的子数组

题目链接:209.长度最小的子数组

解法一:暴力(不考虑超时)

以下代码为暴力方法,for循环里面嵌套一个for循环进行搜索,却只通过了17个测试用例,后面一直超时错误,也没想到其他方法,就看了别人的方法,在后面。

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        vector<int> v;
        int x,y;
        int sum2 = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] >= target) {
                v.push_back(1);
            }
        }
        for (int i = 0; i < nums.size()-1; i++) {
            int sum = nums[i];
            for (int j = i+1; j < nums.size(); j++) {
                sum += nums[j];
                if (sum >= target) {
                    x = i;
                    y = j;
                    int sub = y-x+1;
                    v.push_back(sub);
                    break;
                }
            }
        }
        if (v.empty()) {
            v.push_back(0);
        }
        sort(v.begin(),v.end());
        return v[0];
    }
};

在这里插入图片描述
在这里插入图片描述

官方的暴力更简便点,但都一个思路,我写的冗余点,但官方暴力还是无法AC。

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int n = nums.size();
        if ( n == 0) {
            return 0;
        }
        int ans = INT_MAX;
        for (int i = 0; i < n; i++) {
            int sum = 0;
            for (int j = i; j < n; j++) {
                sum += nums[j];
                if (sum >= target) {
                    ans = min(ans, j-i+1);
                    break;
                }
            }

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

在这里插入图片描述

解法二:滑动窗口

思路:不断的调节子序列的起始位置和终止位置,假如先设置起始位置,其思想和暴力没什么区别,所以得先设置终止位置。
1、设置j为终止位置指针,不断往后遍历,直到大于等于target的位置
2、滑动起始位置,往后移动一位(这时候窗口内的和会减去之前起始的一位,由于减去的这个数的值不知道大小,所以可能减去还是会大于等于target,所以要用while进行判断),然后不断进行更新判断就行
在这里插入图片描述

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

在这里插入图片描述

LeetCode 59.螺旋矩阵II

题目链接:59.螺旋矩阵II

思路:按照螺旋的规律,对矩阵进行填充,先填外圈,再填内圈,直到最里面
根据下图可有效得到:
1、先判断要填几圈,也就是最外层的for循环要走多少次。
2、每一圈填充时,每次都走该圈的边长减1
即,走4X4最外圈时,每次都走3步,走里圈2X2时,每次都走1步。
走5X5最外圈时,每次都走4步,走里圈3X3时,每次都走2步,最后还剩下一个。
3、由于每圈的走法都是一样的,都分为四次,所以只需要写一圈的的走法就可以
设定四个指针变量,方便到内圈的时候也适用。
第一次走,横坐标不变(为heng),纵坐标从zong走到zong_wei - 1;
第二次走,纵坐标不变(为zong_wei),横坐标从heng走到heng_wei - 1;
第三次走,横坐标不变(为heng_wei),纵坐标从zong_wei走到zong + 1;
第四次走,纵坐标不变(为zong),横坐标从heng_wei走到heng + 1;
执行完,对zong++;zong_wei–;heng++;heng_wei–;即可进入下一圈。

注意:特殊奇数螺旋矩阵的时候,最里面一圈只填入一个,当zong和zong_wei都指向最中间时(heng和heng_wei也指向最中间)插入完,会再对它们进行++和–操作,这时候会报错,所以这时候需要判断以下。

4、走完输出即可。

4X4的螺旋矩阵

在这里插入图片描述

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> v(n, vector<int>(n));
        int heng = 0;
        int heng_wei = n-1; 
        int zong = 0;
        int zong_wei = n-1;
        int k = n/2;
        int m = 1;
        if (n == 1){
            v[0][0] = 1;
        }
        else{
            for (int j = 0; j <= k-1; j++) {
                for (int i = zong; i <= zong_wei-1; i++) {
                    v[heng][i] = m;
                    m ++;
                }
                for (int i = heng; i <= heng_wei-1; i++) {
                    v[i][zong_wei] = m;
                    m ++;
                }
                for (int i = zong_wei; i >= zong + 1; i--) {
                    v[heng_wei][i] = m;
                    m ++;
                }
                for (int i = heng_wei; i >= heng + 1; i--) {
                    v[i][zong] = m;
                    m ++;
                }
                heng ++;
                heng_wei --;
                zong ++;
                zong_wei --;
                if (heng == heng_wei){
                v[heng][heng] = m;
                }
            }
        }
        return v;
    }
};

在这里插入图片描述

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

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

相关文章

2019年1+X 证书 Web 前端开发中级理论考试题目原题+答案——第二套

&#x1f4da;文章目录 &#x1f3af;关于1X标准 &#x1f3af;关于中级考点 ⏩&#x1f4bb;答案速查 一、单选题&#xff08;每小题2分&#xff0c;共30小题&#xff0c;共60分&#xff09; 二、多选题&#xff08;每小题2分&#xff0c;共15小题&#xff0c;共30分&…

测试工程师必备的数据库知识

测试工程师必备的数据库知识 1. 数据库的重要性 数据库是一个容器&#xff0c;仓库存的是货物&#xff0c;而数据库存的是数据。数据很好的解决了数据到哪里去&#xff0c;以及数据从哪里来的问题。 2. 数据库工具的选择 选择数据库是根据项目特点&#xff0c;架构&#xff0c;…

枚举类与注解(复习)

枚举类的使用 枚举类的使用如何自定义枚举类枚举类中的方法注解 Annotation自定义注解jdk 中四个元注解RetentionTargetDocumentedInheritedJdk 8 中注解新特性可重复注解 Repeatable类型注解类的对象只有有限个&#xff0c;确定的 星期&#xff1a;Monday(星期一)、…、Sunday…

为什么学3D建模前没人告诉我这些,常见问题答疑

1️⃣入门前建模新手要做好哪些准备❓ 一开始啥都不懂先别着急学&#xff0c;先刷刷Pinterest&#xff0c;ArtStation等业内比较知名的网站&#xff0c;多看优秀作品提高审美水平&#xff0c;这样能快速了解建模行业&#xff0c;到时上手操作也不至于脑袋空空没有想法&#xf…

C语言-数据类型

C语言-数据类型0. 概念表达式与语句字面量常量表达式/表达式1. 整型有符号/无符号进制数原码/补码/反码int/charfloat/double2. 字符型字符型与整型字符与进制数/字符型进制数putchar/getchar转义字符字符集与字符编码C语言字符串型puts/getsprintfscanf3. 数据运算/IO基本运算…

计算机SSM毕设项目 软件工程毕业设计【源码+论文】

文章目录前言 题目1 : 基于SSM的游戏攻略资讯补丁售卖商城 <br /> 题目2 : 基于SSM的疫情期间医院门诊网站 <br /> 题目3 : 基于SSM的在线课堂学习设计与实现<br /> 题目4 : 基于SSM的大学生兼职信息系统 <br /> 题目5 : 基于SSM的大学生社团管理系统 …

nginx降权+匹配php

目录 nginx降权启动 确认普通用户无法开启nginx 创建普通用户&#xff1a; 测试是否可以启动nginx: 创建必须的相关文件 使用root用户copy配置文件中网页支持类型文件 使用root用户拷贝nginx配置文件 设置权限 修改配置文件 安装 PHP 7.4&#xff0c;配合 Nginx 安装 P…

wireshark提取视频数据之RTP包中提取H264和H265

wireshark提取视频数据之RTP包中提取H264和H265 文章目录wireshark提取视频数据之RTP包中提取H264和H2651 背景2 提取前工作3 H264视频从RTP包中提取步骤4 H265视频从RTP包中提取步骤5 后记1 背景 在流媒体相关问题分析时&#xff0c;抓包分析是非常重要的手段&#xff0c;比如…

容器入门:一文了解容器的发展历史、技术和术语

学习目标 本文为Amazon容器入门课程笔记&#xff0c;内容是容器化背后的发展历史和概念&#xff0c;介绍容器生态系统中使用的特定技术&#xff0c;并讨论容器在微服务架构中的重要性。 本篇文章仅做前两个小结的梳理和总结。看完这篇文章之后应该掌握容器背后的发展历史、技…

webpack使用详解

什么是webpack 官方定义&#xff1a;从本质上来说&#xff0c;webpack是一个现代的JavaScript的静态模块打包工具。 webpack是前端工程化的一个解决方案。 主要功能&#xff1a; 提供了前端模块化功能支持&#xff0c;模块混淆&#xff0c;代码压缩&#xff0c;处理浏览器JS兼…

腾格尔发新歌《遥远的地方》,成都邓秀菊自发红包朋友圈寻歌词

随着卡特尔世界杯拉开帷幕&#xff0c;著名音乐人腾格尔&#xff0c;再一次走进大家的视野当中&#xff0c;不过这次却不是因为唱歌。腾格尔是一个音乐人&#xff0c;他更是一个出色的球迷&#xff0c;为了表达对世界杯的喜爱&#xff0c;他还专门拍摄了段子上传网络。 说起音乐…

C++ :Symbol:符号

1&#xff1a;符号的概念 符号&#xff08;symbol&#xff09;是在 ELF格式中会遇到的概念&#xff0c;也就是在写汇编代码时候会遇到的&#xff0c;而在更高级语言&#xff08;C或者C&#xff09;中不会直接遇到这个概念&#xff0c;我们把讨论的范围限制在 Linux上的ELF格式…

python多分支选择结构实例讲解

多分支选择结构的语法格式如下&#xff1a; if 条件表达式 1 : 语句 1/语句块 1 elif 条件表达式 2: 语句 2/语句块 2 elif 条件表达式 n : 语句 n/语句块 n [else: 语句 n1/语句块 n1 ] 【注】计算机行业&#xff0c;描述语法格式时&#xff0c;使用中…

Word处理控件Aspose.Words功能演示:使用 C# 在 Word 文档中创建条形码

条形码是具有编码数据/信息的平行线、点或矩形形式的图像。行业专业人士使用条形码嵌入和访问产品信息、跟踪产品移动并跟上库存。在某些情况下&#xff0c;我们可能需要在 MS Word 文档中生成和添加条形码。MS Word 是最流行和广泛使用的图形文字处理程序。它用于创建带有文本…

总结:从实模式到保护模式的流程和相关寄存器,相关数据结构之间的联系

总结&#xff1a;从实模式到保护模式的相关寄存器和相关数据结构之间的联系 1.怎么进入保护模式 段描述符 段描述符&#xff1a; 实模式下的用户可以破坏存储代码的内存区域 &#xff0c;用段描述符来对某一段进行描述内存段类型属性来阻止这种行为。8个字节大小 全局描述…

[附源码]java毕业设计朋辈帮扶系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

HTML基础

文章目录一、HTML结构1、认识HTML标签2、HTML文件基本结构3、标签层次结构二、HTML常见标签1、注释标签2、标题标签3、段落标签4、换行标签5、格式化标签6、图片标签7、超链接标签8、表格标签9、列表标签10、表单标签12、 div & span一、HTML结构 1、认识HTML标签 HTML 代…

光点高校数据中台,助力高校信息化迎来发展新格局_光点科技

数据是教育信息化改革创新过程中的核心资产。从大数据的角度构建高校数据治理体系&#xff0c;支持高校管理信息向智能化服务和教育数字化转型&#xff0c;已成为必然趋势。 然而&#xff0c;高校拥有更大的数据规模、更复杂的数据类型、更密集的数据交换和对数据治理的需求。因…

从各大论坛收集整理的八股文手册,肝完横躺95%的Java面试岗位

今年的秋招很多小伙伴收获不错&#xff0c;拿到了心仪的offer。也有很多小伙伴屡屡碰壁&#xff0c;选择待在舒适区&#xff0c;不过没关系&#xff0c;错过了今年的金九银十&#xff0c;来年的春招再战呗&#xff01; 最近在各大论坛和社区里看见不少小伙伴慷慨地分享了常见的…

JS正则表达式

文章目录1、创建正则表达式的方式1.1、字面量形式1.2、对象2、正则方法2.1、exec()2.2、test()2.3、可以用于正则的string方法2.3.1、match()2.3.2、replace()补充&#xff1a;$在正则替换中的使用2.3.3、search()2.3.4、split()2.3.5、matchAll()3、边界量词4、模式修饰符5、原…