代码随想录二战day2

news2024/11/18 4:35:47

977有序数组的平方

力扣

思路:

        第一:

                和之前一样的,看见数组我们的第一想法就是使用双指针去解。这道题需要额外开辟一个答案数组去储存结果。

        第二: 

                头指针指向第一个元素,尾指针指向最后一个元素。然后对两个元素分别进行平方。这里看清题目意思:最终的数组依然是一个有序数组。也就是说是按照从小到大的顺序去排列。那么我们肯定是首先取平方大的那个元素放入我们的答案数组中去。

也就是说

                if (left)**2 > (right)**2,那么(left)**2这个就要储存到数组中去。这里还有一个点要注意。就是我们答案数组的创建。不能直接创造一个空数组[],而是用[-1]*len(nums)。根据题目数组的长度去创建一个同样长度的数组。因为我们需要之后的尾部指针和头部指针需要不断的移动。如果是一个空数组,那么只能做到一个不断被赋值而不是起到一个储存的作用了。

代码:

def sortedSquares(self, nums: List[int]) -> List[int]:
        result = [-1]*len(nums)
        k = len(nums)-1 
        i = 0 
        j = len(nums)-1
        while i <=j:
            if nums[i]**2 > nums[j]**2:
                result[k] = nums[i]**2 
                i+=1 
            else:
                result[k] = nums[j]**2 
                j-=1 
            k-=1
        return result

这里的k代表答案数组中的指针,需要不断的更新替换来达到一个储存的作用。

209 长度最小子数组

力扣

 思路:

                第一:

                        这道题目难点在于如何确定起始位置和终止位置。这里用i和j分别代表起点和终点。

很明显,这道题用i代表起点位置,j代表终点位置。

               第二 :

                      首先创建一个sum = 0,然后循环的加上nums[j],一旦发现这个sum>=target了之后,说明找到了满足提议的元素,然后这里用当前j的下标-i的下标+1(因为下标从0开始)得到当前数组的长度。然后更新我们的result(这里result初始化为一个最大值max)在这里不断更新result来储存我们满足题意的元素和的长度。也就是储存有几个元素的和(并且长度是最小的)满足大于等于target。那下一次的循环,我们的起点位置也要更新,并且当前的sum要减去nums[i],也就是起点元素变化了,有新的了。然后i+=1。

最后我们检查的时候,这里有一个特殊情况,如果给定的数组是[1,1,1,1,1],target = 7.那么他其实全部加起来也不可能满足我们的要求,也就是说我们的result根本不会被更新,因为进入不到我们的循环中去。所以最后我们检查的时候应该是  return 0 if result==float('inf) else result 

如果还是等于初始的最大值说明这个无解,那么就返回0 ,不然就返回我们的答案。

代码:

def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        i = 0 
        sum_j = 0 
        result = float('inf')
        for j in range(len(nums)):
            sum_j +=nums[j]
            while sum_j>=target:
                sub_l = j-i+1 
                result = min(result,sub_l)
                sum_j-=nums[i]
                i+=1 
        return 0 if result==float("inf") else result

这里 为什么是while sum_j>=target而不用if呢?这也就是我们刚才那个特殊情况,比如说数组是[1,1,1,1,100],target=100。当加到最后一个100的时候,我们满足了条件。如果这里用if的话,那么我们会用j当下的下标4,减去第一个元素的下标0然后+1,得到一个5的长度。然后if判断完成,这里我们最开始的for循环j也走到了最后,直接就退出了一整个大循环,那么我们最后的答案就是[1,1,1,100].但是这是我们想要的最短的答案长度吗?很明显这个不是,所以我们用while的原因就是,要让他一直减下去。直到得到一个最短的长度为止。

59螺旋矩阵

力扣 

这道题 可谓是 梦魇般的存在 真的 四个循环 各位小伙伴真的真的要画图 这道题才能做 空想是很容易晕的。。。

思路:

        第一:

                首先 这道题给了一个数字n,会生成一个n*n的矩阵。那么首先我们就要根据这个去创建一个n*n矩阵。 其次!由于这个n的奇偶性质会影响循环的圈数。打个比方,如果是n=2,那就是一个2*2矩阵,那么转一圈就够了。如果n是3,那就是一个3*3矩阵。是不是就转不完,因为中间还剩一个数。所以首先有一个loop=n//2的圈数。

        第二:

                这道题分为四个边 从左到右 从上到下 从右到左 从下到上。 那么每一条边该遵循怎么样的规则去填充数字呢?这里建议大家统一遵守一个规则 左闭右开或者左闭右闭二选一。不要混淆着用,会直接晕掉的。。。。

       第三:这里建议大家画一个n*n的矩阵图,然后标上坐标

                

 以上图为例子。这里在设置一个start_x和start_y来控制我们每次当前需要填充的地方。

代码:

def generateMatrix(self, n: int) -> List[List[int]]:
        
        #分为四个循环 
        #从左往右 从上到下 从右往左 从下到上 

        #先确定循环要几圈(根据n的奇偶性判断 

        #如果n=4,那就是一个4*4矩阵 那就是需要转4//2圈 
        #如果n=3,那就是一个3*3矩阵,那就需要3//2圈,然后剩下中间一个空 
        loop = n//2

        #计数填充数字 
        count = 1 
        mid = n//2
        #构造n*n矩阵 
        matrix = [ [0] * n for _ in range(n)]
        #设置每条边的起点和终点 并且只遵循一种原则(左闭右开/左闭右闭)
        start_x= 0 
        start_y = 0 
        
        #这里遵循左闭右开原则
        for i in range(1,loop+1):
            #先填充从左到右
            for j in range(start_x,n-i):
                matrix[start_x][j] = count  
                count+=1 
            #再填充 从上到下
            for j in range(start_x,n-i):
                matrix[j][n-i] = count 
                count+=1 
            #从右往左
            for j in range(n-i,start_y,-1):
                matrix[n-i][j] = count 
                count+=1 
            #从上往下 
            for j in range(n-i,start_y,-1):
                matrix[j][start_y] = count 
                count+=1 
            start_x+=1 
            start_y+=1
        if n%2!=0:
            matrix[mid][mid] = n**2
        return matrix 

其实可以发现,如果n是奇数,那么剩下的那个数字其实就是n的平方。最后的if判断是根据n的奇偶性来检查是否需要补充数字,如果不需要的话就刚好直接返回我们新的matrix就可以了

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

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

相关文章

RocketMQ安装(Docker)

一、RocketMQ安装之docker 1.下载RockerMQ需要的镜像 docker pull rocketmqinc/rocketmq docker pull styletang/rocketmq-console-ng 2.启动NameServer服务 创建NameServer数据存储路径 mkdir -p /home/rocketmq/data/namesrv/logs /home/rocketmq/data/namesrv/store启动…

拾起王慧文的AI梦,美团冲向“光年之外”?

“十年&#xff0c;我需要休息休息&#xff0c;下一个十年&#xff0c;就托付给兄弟们了&#xff0c;感谢你们。” 2020年底&#xff0c;王慧文在朋友圈写下这句话时&#xff0c;外界本以为这位伴随中国互联网发展而持续创业20年的人物即将告别创业舞台。但是&#xff0c;一个…

Kubernetes创建集群—使用 Minikube 创建集群

一、使用 Minikube 创建集群 1、Kubernetes 集群 Kubernetes 协调一个高可用计算机集群&#xff0c;每个计算机作为独立单元互相连接工作。 Kubernetes 中的抽象允许你将容器化的应用部署到集群&#xff0c;而无需将它们绑定到某个特定的独立计算机。为了使用这种新的部署模型…

keepalived安装与使用(Nginx高可用)

一、Keepalived 简介&#x1f349; 1.什么是Keepalived &#xff1f;&#x1f95d; Keepalived一个基于VRRP 协议来实现的 LVS 服务高可用方案&#xff0c;可以利用其来解决单点故障。一个LVS服务会有2台服务器运行Keepalived&#xff0c;一台为主服务器&#xff08;MASTER&a…

Learn Mongodb DB功能命令索引等搜索 ⑤

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; PHP MYSQL &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

layui框架学习(31:下拉菜单模块)

Layui的下拉菜单组件模块dropdown支持动态构建下拉菜单及右键菜单&#xff0c;不同于之前学习的页面元素中的菜单&#xff0c;后者主要是在页面中搭建菜单结构&#xff0c;然后通过设置layui提供的菜单相关的预设类对菜单结构进行样式渲染&#xff0c;而通过dropdown模块则是基…

【单片机】STM32单片机,RTC实时时钟,STM32F103C8T6,程序,万年历,数字时钟

文章目录 基础介绍rtc.hrtc.cmain.c 基础介绍 我以STM32F103C8T6为例&#xff0c;但STM32F103的RTC是通用的&#xff0c;STM32F103C8T6有一个原理图&#xff1a; https://qq742971636.blog.csdn.net/article/details/131288390 用纽扣电池给VBAT供电&#xff08;要共地&…

基于matlab使用多类掩码区域的卷积神经网络对人和汽车的各个实例进行分段(附源码)

一、前言 此示例展示了如何使用基于多类掩码区域的卷积神经网络 &#xff08;R-CNN&#xff09; 对人和汽车的各个实例进行分段。实例分割是一种计算机视觉技术&#xff0c;您可以在其中检测和定位对象&#xff0c;同时为每个检测到的实例生成分割图。 此示例首先演示如何使用…

shardingsphere-proxy 实现postgresql的单库分表

1、docker 安装zookeeper 1、拉取镜像 docker pull zookeeper2、运行容器 docker run -d -e TZ"Asia/Shanghai" -p 2181:2181 -v /home/sunyuhua/docker/zookeeper:/data --name zookeeper --restart always zookeeper3、查看容器是不是运行成功 docker exec -i…

Spring Boot 中的 @SendTo 注解

Spring Boot 中的 SendTo 注解 在 Spring Boot 中&#xff0c;SendTo 注解是一个非常有用的注解&#xff0c;它可以用于实现 WebSocket 的消息转发功能。本文将介绍 SendTo 注解的原理、使用方法和示例代码。 什么是 SendTo 注解 SendTo 注解是 Spring Boot 中用于将消息发送…

个人和企业如何有效保护IP地址?

随着互联网的快速发展&#xff0c;个人和企业对于保护IP地址的重要性越来越清晰。为了帮助读者更好地了解如何有效保护IP地址&#xff0c;以下将介绍几种方法&#xff0c;并提供一些相关的数据和专家意见。 使用防火墙是保护IP地址的一个重要手段。防火墙可以监控和过滤网络流量…

react native 使用Native Module、Intent、广播接收器 实现两个app之间的相互通信

一、react native版本环境: “react”: “18.1.0”, “react-native”: “0.70.6”, “node”: "14.18.2 二、发送端步骤: 在A app中注册一个Native Module模块,使用Intent 连接B app,sendBroadcast 发送广播传递数据。 (1)首先在 /android/app/src/main/java/com/j…

ASP.NET Core MVC从入门到精通[PDF版]

随着技术的发展&#xff0c;ASP.NET Core MVC也推出了好长时间&#xff0c;经过不断的版本更新迭代&#xff0c;已经越来越完善&#xff0c;本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容&#xff0c;适用于初学者&#xff0c;在校毕业生&#xff0c…

three.js点材质(PointsMaterial)常用属性设置

一、前景回顾 上一章节简单介绍了下怎么使用点材质和点对象创建物体点对象和点材质介绍 点材质和点对象基本运用示例代码&#xff1a; import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/examples/jsm/controls/Orbit…

A核与M核异构通信过程解析

现在越来越多的产品具有M core和A core的异构架构&#xff0c;既能达到M核的实时要求&#xff0c;又能满足A核的生态和算力。比如NXP的i.MX8系列、瑞萨的RZ/G2L系列以及TI的AM62x系列等等。虽然这些处理器的品牌及性能有所不同&#xff0c;但多核通信原理基本一致&#xff0c;都…

Linux操作系统配置代理服务器

PS:本文只是针对Linux操作系统对于代理服务器的配置操作&#xff0c;不涉及广告 1.代理的概念 代理服务器英文全称是Proxy Server&#xff0c;其功能就是代理网络用户去取得网络信息。形象的说&#xff1a;它是网络信息的中转站。在一般情况下&#xff0c;我们使用网络浏览器直…

华为智能高校出口安全解决方案(1)

华为智能高校出口安全解决方案&#xff08;1&#xff09; 视频链接方案背景需求分析高校园区网概述高校园区网全景高校出口场景介绍高校出口整体需求分析业务安全需求攻击防御需求运维审计需求 方案规划华为智能高校出口安全解决方案架构华为智能高校出口安全解决方案功能划分业…

(二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆点的“彩色拖尾”效果以及“选中方框”效果

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 &#xff08;一&#xff09;Qt 将某控件、图案绘制在最前面的方法&#xff0c;通过QGraphicsScene模块实现 &#xff08;二&#xff09;Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方&#xff0c;实现圆…

强化学习从基础到进阶-案例与实践[5.1]:Policy Gradient-Cart pole游戏展示

强化学习从基础到进阶-案例与实践[5.1]&#xff1a;Policy Gradient-Cart pole游戏展示 强化学习&#xff08;Reinforcement learning&#xff0c;简称RL&#xff09;是机器学习中的一个领域&#xff0c;区别与监督学习和无监督学习&#xff0c;强调如何基于环境而行动&#x…

关于u(x,t)=f(x)*g(t)形式证明的思考

突然想起来&#xff0c;二维高斯函数是可以拆分成两个一维高斯函数相乘的&#xff1a; 原来在学概率论的时候&#xff0c;证明过&#xff0c;这只能说高斯函数可以&#xff0c;这是一个思路。 一维波动函数应该也是这个套路。 那么还有没有其他函数可以如此&#xff0c;有如此…