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

[数组]977.有序数组的平方;209.长度最小的子数组

 977.有序数组的平方

暴力解法:

时间复杂度nlogn

# 暴力解法
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:for i in range(len(nums)):nums[i] *= nums[i]nums.sort()return nums

双指针法:

时间复杂度n

# 双指针法
class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:r,l,k = 0,len(nums)-1,len(nums)-1result = [float(inf)]*len(nums)while r<=l:if nums[r]**2>nums[l]**2:result[k]=nums[r]**2r += 1else:result[k]=nums[l]**2l -= 1k -= 1return result

时间复杂度:

209.长度最小的子数组

接②:这也是滑动窗口的精华所在;滑动窗口最重要的一个思路就是如何如何移动起始位置

for循环里面的j下标已经确定了,它指向滑动窗口中的终止位置。

终止位置随for循环一个个向后移动,什么时候移动起始位置?如果终止位置指向一个地方,集合中的元素大于等于target,说明这是符合条件的一个集合,知道长度之后,起始位置就可以向后移动了 ,这样来缩小目前的这个集合,看下一个集合是否符合条件

也就是说,当我们发现集合中的所有元素和大于等于target的时候,再去移动起始位置;通过动态调整起始位置来收集不同长度区间里边的和

#类似C++的伪代码
i = 0  #表示起始位置
result = Max  #初始为最大值才能不断更新较小值for(j=0,j<=numsize;j++)#在这里开始收集终止位置所指向的一个元素,因为我们是要有一个集合,用集合里面的元素和来与target做判断,这里的sum就是滑动窗口中的元素和sum += nums[j];#这里终止位置一个个向后移动,直到和大于等于targetwhile(sum>=target) #这时候要收集此时滑动窗口长度的条件,因为要取元素和大于等于target的最小长度;#此处是if还是while:if--如果滑动窗口中的值满足sum>=target就进行下面的操作,但是写if会出现一种情况元素集合:(1,1,1,1,1,100)s = 100i= 0,j = 5时满足sum>100取得正确的result需要将i向后移动5次如果这里写if,则判断一次就结束了所以这里不能是if,只能是while持续向后移动当滑动窗口中的元素大于等于target,滑动窗口的长度表示subL = j-i+1收集完长度之后要有一个result,是最终取的最小长度 ,并可以持续更新,符合总和大于target的最小长度result = min(result, subL );将集合收集完之后,要开始移动起始位置,将起始位置向后移动一位,每移动一位,sum减去一位sum = sum - nums[i];i++;到此,滑动窗口的起始位置如何移动就完成了
class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:i = 0l =  len(nums)result = float(inf)s = 0for j in range(0,l):s += nums[j]while s>=target:result = min(result,j-i+1)s -= nums[i]i += 1return result if result !=float(inf) else 0

http://www.xdnf.cn/news/17169.html

相关文章:

  • 跨越系统孤岛:4A架构如何实现企业级一体化协同
  • 深度解析 TCP 三次握手与四次挥手:从原理到 HTTP/HTTPS 的应用
  • 【AI论文】iLRM:一种迭代式大型3D重建模型
  • Vue3视频播放组件自定义封装、控制是否自动播放、全屏小屏控制、loading加载、静音播放等样式完全自定义控制,代码复制即用
  • JAVA学习笔记 自增与自减的使用-006
  • uniapp转app时,cover-view的坑
  • Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)
  • 基于k8s环境下的pulsar常用命令(下)
  • 创维智能融合终端SK-M424_S905L3芯片_2+8G_安卓9_线刷固件包
  • 计算机网络:目的网络在路由表项中的作用
  • 如何通过 5 种方式将照片从 iPad 传输到电脑
  • MongoDB学习专题(一)介绍安装基本操作
  • 电路基础相关知识
  • 【轮播图】H5端轮播图、横向滑动、划屏效果实现方案——Vue3+CSS position
  • Python爬虫09_Requests用bs4进行数据解析
  • Java、Android及计算机基础面试题总结
  • ubuntu-server安装
  • 外协采购订单的价格差异科目没有产生差异科目问题
  • MongoDB学习专题(二)核心操作
  • 使用buildx构建镜像
  • 蓝桥杯常用java API
  • 东北大学“进化论”赋能具身导航!SE-VLN:基于多模态大模型的自进化视觉语言导航框架
  • wps创建编辑excel customHeight 属性不是标准 Excel Open XML导致比对异常
  • 【qt5_study】2.使用Qt Designer构造UI界面(信号与槽)
  • PHP实战代码解析与应用分享:用户管理、日志,配置管理与文件操作全解析
  • 《C++》继承完全指南:从入门到精通
  • 基于 Spring Boot 的小区人脸识别与出入记录管理系统实现
  • mac安装pycharm
  • 【Dify学习笔记】:保留原所有数据,升级Dify版本
  • Android 中几种常用布局的优缺点