除自身以外数组的乘积(c语言详解)
题目:除自身外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请不要使用除法,且在 O(n) 时间复杂度内完成此题。
提示:
2 <= nums.lengh <= 10^5
-30 <= nums[i] <= 30
保证数组之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内 nums;
示例 1:
输入:nums=[ 1,2,3,4 ]
输出:[ 24,12,8,6 ]
示例 2:
输入:nums=[ -1,-1,0,-3,3 ]
输出:[ 0,0,9,0,0 ]
解题思路:
定义两个数组(前缀乘积数组与后缀乘积数组),前缀数组为:left [ ] ,后缀数组:right [ ] ;
left [ i ] 里存 nums [ i ] 前面的乘积和,righ[ i ] 里存 nums [ i ] 后面的乘积和,(为空时存1);
创建一个动态内存变量 int* ret=(int*)malloc(sizeof(int)*numsSize);
然后ret [ i ]=left [ i ] * right [ i ],存储后返回;
思路实现:
因为数组元素 :2 <= nums.lengh <= 10^5
所以前缀和后缀数组申请的数组大小都是10^5;
int left[100000]={0};
int right[100000]={0};
然后就是遍历求前缀乘积数组的各项值:
//前缀乘积和for(i=0;i<numsSize;i++){if(i==0){left[i]=1;}else{left[i]=left[i-1]*nums[i-1];}}
解析:
这里呢用数组 nums [ 1,2,3,4,5,6 ] 来举例;
此时,left [ 0 ] =1,然后 left [ 1 ] = left [ 0 ] * nums [ 0 ] 相当于 left [ 1 ] = nums [ 0 ] ;
left [ 2 ] = left [ 1 ] * nums [ 1 ] 相当于 left [ 2 ] = nums [ 0 ] * nums [ 1 ] ;
left [ 3 ] = left [ 2 ] * nums [ 2 ] 相当于 left [ 3 ] = nums [ 0 ] * nums [ 1 ] * nums [ 2 ] ;
。。。。。。
left [ 5 ] = left [ 4 ] * nums [ 4 ] 相当于 left [ 5 ] = nums [ 0 ] * nums [ 1 ] * nums [ 2 ] * nums [ 3 ] * nums [ 4 ] ;
想必大家也已经找到其中的规律了;
然后就是遍历求后缀乘积数组的各项值:
//后缀乘积和for(i=numsSize-1;i>=0;i--){if(i==numsSize-1){right[i]=1;}else{right[i]=right[i+1]*nums[i+1];}}
解析:
同理:nums [ 1,2,3,4,5,6 ]
left [ 5 ] =1,然后 left [ 4 ] = left [ 5 ] * nums [ 5 ] 相当于 left [ 4 ] = nums [ 5 ] ;
left [ 3 ] = left [ 4 ] * nums [ 4 ] 相当于 left [ 3 ] = nums [ 4 ] * nums [ 5 ] ;
left [ 2 ] = left [ 3 ] * nums [ 3 ] 相当于 left [ 2 ] = nums [ 3 ] * nums [ 4 ] * nums [ 5 ] ;
。。。。。。
left [ 0 ] = left [ 1 ] * nums [ 1 ] 相当于 left [ 0 ] = nums [ 1 ] * nums [ 2 ] * nums [ 3 ] * nums [ 4 ] * nums [ 5 ] ;
然后就是给返回值(* returnSize)赋值,以及创建动态内(ret),以及给其赋值再返回;
* returnSize=numsSize;int* ret=(int*)malloc(4*numsSize);//给返回指针赋值for(i=0;i<numsSize;i++){ret[i]=left[i]*right[i];}
时间复杂度为(O(N) ) ;
这就是这道题目的基本思路,下面是程序源代码:
int* productExceptSelf(int* nums, int numsSize, int* returnSize){int i=0;int left[100000]={0};int right[100000]={0};//前缀乘积和for(i=0;i<numsSize;i++){if(i==0){left[i]=1;}else{left[i]=left[i-1]*nums[i-1];}}//后缀乘积和for(i=numsSize-1;i>=0;i--){if(i==numsSize-1){right[i]=1;}else{right[i]=right[i+1]*nums[i+1];}}* returnSize=numsSize;int* ret=(int*)malloc(4*numsSize);//给返回指针赋值for(i=0;i<numsSize;i++){ret[i]=left[i]*right[i];}return ret;
}
如有不足欢迎来补充交流!
完结。。。
相关文章:
除自身以外数组的乘积(c语言详解)
题目:除自身外数组的乘积 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除…...

ONES × 鲁邦通|打造研发一体化平台,落地组织级流程规范
近日,ONES 签约工业互联网行业领先的解决方案提供商——鲁邦通,助力鲁邦通优化组织级流程规范,落地从需求到交付的全生命周期线上化管理。 依托于 ONES 一站式研发管理平台,鲁邦通在软硬件设计开发、项目管理和精益生产等方面的数…...
【GaussDB】 SQL 篇
建表语句 表的分类 普通的建表语句 复制表内容 只复制表结构 create table 新表名(like 源表名 including all); 如果希望注释被复制的话要指定including comments 复制索引、主键约束和唯一约束,那么需要指定including indexes including constraints …...

rn和flutter出现“Running Gradle task ‘assembleDebug
在第一次运行rn和flutter时,会卡在Running Gradle task assembleDebug,可以使用阿里的镜像,如下图: maven { url https://maven.aliyun.com/repository/google/ } google() maven { url https://maven.aliyun.com/repository/jcen…...

Shell脚本基础( 四: sed编辑器)
目录 1 简介 1.1 sed编辑器的工作流程 2 sed 2.1 基本用法 2.2 sed基本格式 2.2.1 sed支持正则表达式 2.2.2 匹配正则表达式 2.2.3 奇数偶数表示 2.2.4 -d选项删除 2.2.5 -i修改文件内容 2.2.6 -a 追加 2.3 搜索替代 2.4 变量 1 简介 sed是一种流编辑器,…...

微信消息没通知iphone can‘t show notifications
小虎最近手机微信消息没通知,本来以为要卸载,但是发现原来是多客户端登录导致消息被其他平台截取,所有没有通知。 解决方法 小虎是在手机和电脑端同时登录的,所有退出电脑端后手机新消息就有提示了。可能是一个bug。...
Linux Kernel:pid与namespace
环境: Kernel Version:Linux-5.10 ARCH:ARM64 一:前言 Linux内核涉及进程和程序的所有算法都围绕task_struct数据结构建立,具体可看另一篇文章: Linux Kernel:thread_info与task_struct 同时Linux提供了资源限制(resource limit, rlimit)机制,对进程使用系统资源施…...

开源后台管理系统Geekplus Admin
本系统采用前后端分离开发模式,后端采用springboot开发技术栈,mybatis持久层框架,redis缓存,shiro认证授权框架,freemarker模版在线生成代码,websocket消息推送等,后台管理包含用户管理…...

【MATLAB基础绘图第16棒】绘制热图(Heatmap)
热图(Heatmap) 热图的主要作用是直观展示重点研究对象的差异情况,多用于经济学与工学差异性分析之中。 heatmap函数创建热图 语法 hheatmap(tbl,xvar,yvar) hheatmap(tbl,xvar,yvar,ColorVariable,cvar) hheatmap(cdata) hheatmap(xvalue…...

数据库--SQL关键字的执行顺序
数据库相关链接: 数据库--数据类型:http://t.csdn.cn/RtqMD 数据库--三大范式、多表查询、函数sql:http://t.csdn.cn/udJSG 数据库--MySQL增删改查:http://t.csdn.cn/xkiti 一、一条sql语句通常包括: select fro…...

如何优雅地处理Java多线程编程中的共享资源问题,以确保线程安全和高性能?
文章目录 🎉欢迎来到Java面试技巧专栏~如何优雅地处理Java多线程编程中的共享资源问题? ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏:Java面试技巧文章作者技术和水平有限&…...

每天一道leetcode:剑指 Offer 64. 求1+2+…+n(中等递归)
今日份题目: 求 12...n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 示例1 输入: n 3 输出: 6 示例2 输入: n 9 输出: 45 提示 1 < n < 10000 题目思路 使用递归…...

服务器安装centos7踩坑
1、制作启动工具 下载iso https://developer.aliyun.com/mirror/?spma2c6h.25603864.0.0.20387abbo2RFbn http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.1995f5ad4AhJaW下载 UltraISO https://cn.ultraiso.net/插入u盘启动 到了如图所示页面…...

Java | IDEA中 jconsole 不是内部或外部命令,也不是可运行的程序
解决办法: 1.先将Terminal的Shell path 修改为C:\WINDOWS\system32\cmd.exe 2.在检查环境变量中的ComSpec的值 3.找到自己电脑下载的jdk的bin的地址 4.将jdk的bin地址加入到系统变量path中...
将Swift Package构建为通用二进制文件 Universal Binary
将Swift软件包构建为通用二进制文件 因此,在苹果在WWDC 2020期间宣布他们将把Mac从英特尔处理器过渡到苹果硅之后,现在是时候让每个人都准备好他们的软件了。 对大多数人来说,这次过渡可能更容易一些,特别是那些已经在iOS上支持a…...

正则表达式:贪婪与非贪婪模式
正则中的三种模式,贪婪匹配、非贪婪匹配和独占模式。 在这 6 种元字符中,我们可以用 {m,n} 来表示 (*)()(?) 这 3 种元字符: 贪婪模式,简单说就是尽可能进行…...
UVa247 Calling Circles(Floyd warshall算法)
题意 给定两个人相互打电话,如果a打给b,b打给c,c打给a,则说a,b,c在同一电话圈中。给出n个人的m次通话,输出所有的电话圈 思路 用graph[u][v]1表示u和v之间有打电话。在使用floyd算法计算所有的点对之间的值。graph[u][v]1表示u,v之间有直接…...

Java项目之基于ssm框架的社区生活超市管理系统(附源码)
基于ssm框架的社区生活超市管理系统设计与实现(程序源码毕业论文) 大家好,今天给大家介绍基于ssm框架的社区生活超市管理系统设计与实现,本论文只截取部分文章重点,文章末尾附有本毕业设计完整源码及论文的获取方式。更…...
Android 实现录音功能
思路: 通过媒体录制器MediaRecorder实现:MediaRecorder是Android自带的音频和视频录制工具,它通过操纵摄像头和麦克风完成媒体录制,既可录制视频,又可单独录制音频。 MediaRecorder常用方法(录音与录像通用)…...

drawio导出矢量图
1.选中要导出的图 2.导出为pdf 3.用adobe打开pdf,另存为eps...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...