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

HOT 100 | 189.轮转数组、238. 除自身以外数组的乘积、41. 缺失的第一个正数

一、189.轮转数组

189. 轮转数组 - 力扣(LeetCode)

1. 解题思路

1. 由于k可能很大,为了防止多次重复挪动,所以只需要对其取余,就是最终挪动的位置。

2. 自定义一个翻转函数reverse,传入起始位置,然后交换元素即可。

3. 调用翻转函数,首先进行整体翻转,然后对前K个和后K个进行翻转就是最后的结果。

2. 代码实现

class Solution:def rotate(self, nums: List[int], k: int) -> None:def reverse(i: int, j: int) -> None:while i < j:nums[i], nums[j] = nums[j], nums[i]i += 1j -= 1n = len(nums)k %= nreverse(0, n-1)reverse(0, k-1)reverse(k, n-1)

二、238. 除自身以外数组的乘积

238. 除自身以外数组的乘积

1. 解题思路

        answer[i] 等于 nums 中除了 nums[i] 之外其余各元素的乘积。换句话说,如果知道了 i 左边所有数的乘积,以及 i 右边所有数的乘积,就可以算出 answer[i]。所以基本的解题思路是,先计算出前缀积,再计算出后缀积,然后对应相乘就是最后的结果。

        1. 定义 pre[i] 表示从 nums[0] 到 nums[i−1] 的乘积。定义 suf[i] 表示从 nums[i+1] 到 nums[n−1] 的乘积。
        2. 可以先计算出从 nums[0] 到 nums[i−2] 的乘积 pre[i−1],再乘上 nums[i−1],就得到了 pre[i],即:pre[i]=pre[i−1]⋅nums[i−1];同理有:suf[i]=suf[i+1]⋅nums[i+1]。

        初始值:pre[0]=suf[n−1]=1。按照定义,pre[0] 和 suf[n−1] 都是空子数组的元素乘积,我们规定这是 1,因为 1 乘以任何数 x 都等于 x,这样可以方便递推计算 pre[1],suf[n−2] 等。

        3. 算出 pre 数组和 suf 数组后,有:answer[i]=pre[i]⋅suf[i]。

2. 代码实现

class Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:n = len(nums)pre = [1] * nfor i in range(1, n):pre[i] = pre[i-1]*nums[i-1]suf = [1] * nfor i in range(n-2, -1, -1):suf[i] = suf[i+1] * nums[i+1]return [s* p for s, p in zip(pre,suf)]

三、41.缺失的第一个正数

41. 缺失的第一个正数 - 力扣(LeetCode)

1. 解题思路

        1. 由于时间复杂度的限制不能额外拓展一个新数组,所以首先将所有元素放在对应的位置上,也就是遍历数组,然后两两进行交换位置。

        2. 找到第一个不匹配的元素就是缺失的第一个正数。

        3. 如果都没有找到,说明元素都在自己正确的位置,直接返回数组长度+1即可。

2. 代码实现

class Solution:def firstMissingPositive(self, nums:List[int])->int:n = len(nums)for i in range(n):while 1<=nums[i]<=n and nums[i] != nums[nums[i]-1]:j = nums[i]-1nums[i],nums[j] = nums[j],nums[i]for i in range(n):if nums[i]!=i+1:return i+1return n+1

相关文章:

  • TensorRT----RepVGG模型推理与部署
  • WebGL3(WebGL or WebGPU?)
  • 云手机是什么?哪个云手机便宜好用,掌派云手机流畅不卡顿
  • 如何解答一个C++编程题目
  • Docker 一键部署倒计时页面:Easy Countdown全设备通用
  • 西门子PLC S7-200接编码器开发
  • 数据库故障排查指南技术文章
  • Linux `date` 命令深度解析与高阶应用指南
  • numpy执行无缘无故崩溃 没有报错
  • 13软件测试用例设计方法-场景法
  • Baklib知识中台构建实战
  • Python 内存管理机制详解:从分配到回收的全流程剖析
  • Ansible常用Ad-Hoc 命令
  • 动态规划-53.最大子数组和-力扣(LeetCode)
  • CentOS 7.6 + Docker:搭建后端常用的开发环境
  • springboot3 configuration
  • 软件质量保证与测试实验
  • 【计算机CPU架构】x86架构简介
  • <collection> 标签:用于定义 一对多关系 的映射规则
  • 【Python 集合 Set 】全面学习指南
  • 制作公司简介/seo推广软件排行榜前十名
  • 南京制作网站公司/手机推广平台有哪些
  • 网页微信怎么登陆/黑帽seo是什么
  • 图书馆网站建设方案/seo指的是搜索引擎营销
  • 网站建设系统怎么样/上海seo网站策划
  • 免费推广网站下载/焊工培训班