238. 除自身以外数组的乘积/41. 缺失的第一个正数

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

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例 1:

输入: nums = [1,2,3,4]输出: [24,12,8,6]

思路:首先题目已经说了不给用除法,并且在O(n) 时间复杂度内完成此题        

        我们按元素来分析,1除自身外的乘积=2*3*4;4除自身外的乘积=1*2*3;

                                         2除自身外的乘积=1*3*4;3除自身外的乘积=1*2*4;

        可以看到1和4位置特殊在最左边和最右边,

                他们的答案就是1左边所有数相乘,4右边所有数相乘

        2和3位置在中间,他们答案可以分成左右两部分,

                2左边的1*,右边的3和4,3左边的1和2,右边的4。

        所以答案就是元素自身左边的所有元素乘积与右边的所有元素乘积相乘,我们可以先遍历算出每个位置对应左边所有元素的乘积,再遍历算出每个位置对应右边所有元素的乘积。如果元素在边界上,例如1和4,它们的左乘积和右乘积都取1!这是为了最后左右乘积相乘时得到正确答案。

代码:

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int len=nums.size();vector<int> x(len);x[0]=1;for(int i=1;i<len;i++){//遍历元素左乘积x[i]=nums[i-1]*x[i-1];}int right=1;for(int i=len-1;i>=0;i--){//遍历元素右乘积x[i]=x[i]*right;//遍历同时加入答案数组中right=right*nums[i];//记录当前右边元素的累乘结果}return x;}
};

41. 缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 :

输入:nums = [3,4,-1,1]
输出:2
解释:1 在数组中,但 2 没有。

思路:我们可以采用恢复数组的方式来处理,参考示例,去找缺失的第一个正数,肯定是从小到大看过去,对于正常的顺序数组应当有 [1, 2, ..., N] 的形式,所以例子恢复之后变成[1, -1, 3, 4],其中1,3,4都在正确的位置上,而2没在,所以2就是缺失的正数。

恢复数组:

对于遍历到的数 x=nums[i],如果 x∈[1,N],我们就知道 x 应当出现在数组中的 x−1的位置也就是num[x-1]==x,例子中1恢复到了num[0],3恢复到了num[2],4恢复到了num[3]。因此交换 nums[i]和 nums[x−1],这样x就出现在了正确的位置。这里N也就是数组长度

恢复代码:存在nums[[i]-1]==nums[i]的情况,也就是x有多个,并且有一个x在正确位置上,我们需要直接跳过。

        int N=nums.size();for(int i=0;i<N;i++){while(nums[i]>0&&nums[i]<=N&&nums[nums[i]-1]!=nums[i]){swap(nums[i],nums[nums[i]-1]);}}

最后找出缺失的正数

    for(int i=0;i<N;i++){if(nums[i]!=i+1){return i+1;}}return N+1;//如果都在正确位置上,那么缺失第一个正数就是n+1

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

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

相关文章

shell常用文件处理命令

1. 解压 1.1 tar 和 gz 文件 如果你有一个 .tar 文件,你可以使用以下命令来解压: tar -xvf your_file.tar在这个命令中,-x 表示解压缩,-v 表示详细输出(可选),-f 后面跟着要解压的文件名。 如果你的 .tar 文件同时被 gzip 压缩了(即 .tar.gz 文件),你可以使用以下…

黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程笔记

HarmonyOS NEXT是纯血鸿蒙&#xff0c;鸿蒙原生应用&#xff0c;彻底摆脱安卓 本课程是基于harmony os4的&#xff0c;与next仅部分api有区别 套件 语言&框架 harmony os design ArkTs 语言 ArkUI 提供各种组件 ArkCompiler 方舟编译器 开发&测试 DevEco Studio 开发…

Vue3工程化配置

Vue3工程化配置 目录 Vue3工程化配置创建项目vue-clivite(推荐) 快速体验2和3的差别vue3vue2 ref和reactive 创建项目 vue-cli 具体环境配置请点这里 记得新建配置时这里选vue3 vite(推荐) 注&#xff1a;Vite 需要 Node.js 版本 18&#xff0c;20 1.选定路径后再cmd输入创建…

免费在线录屏、无需注册、免费可用、无限制

免费在线工具 https://orcc.online/ 在线录屏 https://orcc.online/recorder pdf在线免费转word文档 https://orcc.online/pdf 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA…

羊大师解读,当代年轻人焦虑应对指南

羊大师解读&#xff0c;当代年轻人焦虑应对指南 当代年轻人面临焦虑问题时&#xff0c;羊大师提出以下综合建议&#xff0c;要增强自我认知了解自身的需求和期望&#xff0c;明确自己的价值观和目标。这有助于避免盲目跟风和过度比较&#xff0c;从而减轻不必要的焦虑。 合理规…

apk反编译修改教程系列---修改指定apk 让其开机自动打开运行【十四】

通过前面的几期反编译apk的博文 。应该初步了解反编译apk的一些常识和简单的修改步骤。在与有些工作室合作中。一些客户需要安卓机型开机自动打开运行指定的apk。这类需求常规我们都先要检查apk有没有加密 加固。然后对应修改其中的代码。今天以一款apk实例步骤演示修改的过程 …

c++ 线程同步的临界区应用举例

在C中&#xff0c;临界区通常是通过互斥量&#xff08;mutex&#xff09;来实现的&#xff0c;因为互斥量用于保护代码段&#xff08;即临界区&#xff09;&#xff0c;以确保在任意时刻只有一个线程可以执行该代码段。然而&#xff0c;从技术上来说&#xff0c;"临界区&q…

企业怎样进行IT外包以及IT外包服务内容

在数字化时代的浪潮中&#xff0c;企业逐渐认识到信息技术的关键作用&#xff0c;特别是制造业基地对于IT外包和运维服务的需求持续增长。然而&#xff0c;在诸多可供选择的IT外包和运维方案中&#xff0c;企业如何推动与IT外包公司的合作&#xff1f;本文将深入介绍IT外包方案…

液位开关常开常闭怎么区分

如今随着科学技术的不断发展&#xff0c;液位检测技术也不断改进&#xff0c;液位开关是如今常用的液位检测技术之一&#xff0c;那么液位开关常开常闭怎么区分&#xff1f; 常开液位开关是指在没有液体存在的情况下就处于导通状态。当液体液面上升到液位开关处时&#xff0c;…

C++| std::copy与memcpy区别

前言&#xff1a;最近在读项目源码&#xff0c;发现有些地方用std::copy&#xff0c;有些地方用memcpy。但是并不知道为什么要这样&#xff0c;但是原作者也不认识&#xff0c;就只好自己研究一下了。 std::copy与memcpy区别 对比使用场景使用std::copymemcpy 对比 相同&#…

探索大型语言模型在信息提取中的应用与前景

随着人工智能技术的快速发展&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;领域取得了显著的进展。特别是在信息提取&#xff08;IE&#xff09;任务中&#xff0c;LLMs展现出了前所未有的潜力和优势。信息提取是从非结构化文…

跨考专业课142分,上岸重邮!

这个系列会邀请上岸学长学姐进行经验分享~ 今天分享经验的同学是我的“关门弟子”&#xff0c;小叮当&#xff0c;跨考上岸重邮通信工程&#xff01;从平时和小叮当的交流和测试&#xff0c;就能看出专业课水平&#xff0c;我一直和她开玩笑说&#xff0c;早点遇到我&#xff…

网站为什么需要固态硬盘服务器

首先&#xff0c;SSD没有旋转磁盘&#xff0c;所以它读写数据的速度比HDD快。了解通过选择SSD固态硬盘服务器可以获得的其他潜在好处。 1.更快的速度&#xff1a;固态硬盘服务器上的站点加载速度可以比HDD服务器上的站点快三倍 2.更高的可靠性&#xff1a;由于缺少活动部件&am…

运行容器时发现内存不足(<2G)--docker版本低:重装docker

一、卸载&#xff1a; sudo yum install -y yum-utilssudo yum remove docker-ce docker-ce-cli containerd.iosudo rm -rf /var/lib/dockersudo rm -rf /var/lib/containerd 二、安装&#xff1a; sudo yum-config-manager --add-repo https://download.docker.com/linux/ce…

如果你作 为Java程序员曾经遭遇过NullPointerException,请举起手

如果你作 为Java程序员曾经遭遇过NullPointerException&#xff0c;请举起手 1.让Optional发光发热&#xff1a;去除代码中对null的检查&#xff0c; 采用防御式检查减少NullPointerException java8实战 书籍 第225页 免费下载链接&#xff1a; https://pan.quark.cn/s/5cf68…

python flask css样式无效

解释&#xff1a; Flask是一个Python的轻量级Web框架&#xff0c;它没有为CSS提供任何内置的支持。如果你在Flask项目中引入了CSS文件&#xff0c;但是这个CSS没有生效&#xff0c;可能的原因有&#xff1a; 路径不正确&#xff1a;你的CSS文件没有放在正确的目录下&#xff0…

GEE数据集——DeltaDTM 全球沿海数字地形模型数据集

DeltaDTM 全球沿海数字地形模型产品 简介 DeltaDTM 是全球沿岸数字地形模型&#xff08;DTM&#xff09;&#xff0c;水平空间分辨率为 1 弧秒&#xff08;∼30 米&#xff09;&#xff0c;垂直平均绝对误差&#xff08;MAE&#xff09;为 0.45 米。它利用 ICESat-2 和 GEDI …

react引入阿里矢量库图标

react引入阿里矢量库图标 登录阿里矢量库&#xff0c;将项目所需的图标放一起 react项目中新建文件夹MyIcon.js 3. 在页面中引入&#xff0c;其中type为图标名称

定时任务的几种实现方式

定时任务实现的几种方式&#xff1a; 1、JDK自带 &#xff08;1&#xff09;Timer&#xff1a;这是java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。…

Unreal游戏GPU参数详解,游戏性能优化再升级

UWA GOT Online For Unreal GPU模式近期全新发布&#xff0c;方便开发者从渲染和带宽的角度进行GPU分析。同时&#xff0c;此次更新中UWA也增加了丰富的GPU参数&#xff0c;涵盖了GPU SoC和GPU Counter模块。这些新增的参数不仅能够帮助Unreal开发者从宏观层面监控GPU的压力状况…