leetcode刷刷题(44) ---- 除自身以外数组的乘积(C语言版)
2020-6-4
- I once heard that the evil spirits who lived in Rashomon fled for fear of the cruelty of human nature.
我曾听说住罗生门的恶鬼,因害怕人性的残忍而逃走。 —芥川龙之介 《罗生门》
题目:
- leetcode – 238. 除自身以外数组的乘积
给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:
输入: [1,2,3,4]
输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/product-of-array-except-self
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
个人解答:(C版本)
方法一:设置两个数组R、L,对应位置nums[i],L[i]存储i位置全部前缀乘积,R[i]存储i位置全部后缀乘积,输出的数组元素O[i] = L[i] * R[i]。具体看代码:
//Note: The returned array must be malloced, assume caller calls free(). int* productExceptSelf(int* nums, int numsSize, int* returnSize){int* L = (int*)malloc(numsSize*sizeof(int));int* R = (int*)malloc(numsSize*sizeof(int));// 得到L[i]L[0] = 1;for(int i=1; i<numsSize; ++i){L[i] = L[i-1] * nums[i-1];}// 得到R[i]R[numsSize-1] = 1;for(int i=numsSize-2; i>=0; --i){R[i] = R[i+1] * nums[i+1];}// 得到输出数组for(int i=0; i<numsSize; ++i){L[i] = L[i] * R[i];}*returnSize = numsSize;free(R);return L; }
复杂度分析
1)时间复杂度:O(N),其中 N指的是数组 nums 的大小。预处理 L 和 R 数组以及最后的遍历计算都是 O(N) 的时间复杂度。
2)空间复杂度:O(N),其中 NN 指的是数组 nums 的大小。使用了 L 和 R 数组去构造答案,L 和 R 数组的长度为数组 nums 的大小。
- 运行结果:
- 方法二:使用常量空间实现(待补充)
他山之石:
- LeetCode官方的题解
leetcode刷刷题(44) ---- 除自身以外数组的乘积(C语言版)相关推荐
- leetcode刷题:除自身以外数组的乘积
题干: 分析:可以把新的数组的每个元素理解为原数组对应的位置的前缀之积和后缀之积. 放在answer中的值,就是我们新的数组对应结果 代码如下: class Solution { public:vec ...
- LeetCode高频题33. 搜索旋转排序数组
LeetCode高频题33. 搜索旋转排序数组 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批A ...
- Leetcode算法题:两个有序数组求中位数
Leetcode算法题:两个有序数组求中位数 要求时间复杂度为O(log(m+n)) 思路: 暴力解决:合并数组并排序,简单且一定能实现,时间复杂度O(m+n) 由于两个数组已经排好序,可一边排序一边 ...
- 每天Leetcode 刷题 初级算法篇-打乱数组
目录 Leetcode刷题 Leetcode刷题 /*** @program: mydemo* @description: 设计问题-打乱数组* @author: Mr.zeng* @create: ...
- LeetCode算法题1:判断整数数组是否存在重复元素
文章目录 前言 一.题目描述 二.思路 1.暴力破解 2.空间换时间(有点像桶排序思想) 3,排序 总结 前言 本系列文章为leetCode刷题笔记,仅供参考. 一.题目描述 给定一个整数数组,判断是 ...
- leetcode刷题日记(一)—— 数组
因为暑期实习找得很不顺利,感觉自身最大的问题体现在刷题量偏少,操作系统,数据库基础不好,所以现在决定写博客来记录整个过程,希望能找到大厂offer,如果不能找到的话也算是为秋招做准备. 剑指offer ...
- LeetCode简单题之按照频率将数组升序排序
题目 给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序.如果有多个值的频率相同,请你按照数值本身将它们 降序 排序. 请你返回排序后的数组. 示例 1: 输入:nums = [1, ...
- 【leetcode刷题】73.商品折扣后的最终价格——Java版
⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 法1 - 暴力:时间复杂度O(n^2) 对于每个i位置找j. 法2 - 单调栈 时间复杂度O(n) --leetcode此题热评 ...
- 【leetcode刷题】51.下一个更大元素 I——Java版
⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 算法不行,现在语文也不行了.我哭了,你们呢? --leetcode此题热评 前言 哈喽,大家好,我是一条. 糊涂算法,难得糊涂 & ...
最新文章
- 基于OpenCV实战:车牌检测
- python学习笔记目录
- 设置maxJsonLength,解决ajax通过POST方式调用.net的webService时,数据过长时服务器返回500错误的问题
- python文件输出-Python 文件和输入输出小结
- SAP财务模块中,科目余额表中的数据存在数据库的哪张表中?
- 生成打印标贴_亚马逊如何打印FBA标签?亚马逊怎么打印FBA标签?
- data的值 如何初始化vue_vue 创建一个基础实例【02】
- 372 Super Pow 超级次方
- 排序——选择排序、快速排序
- 【转】gem install libv8 错误
- matlab在机器视觉的应用实例,十个基于机器视觉的实用案例介绍
- 线报天下免费补丁,使用补丁可解锁全部线报
- 用PHP实现手机对jar,jad文件的下载(转)
- CCF-CSP201809-4 再卖菜
- “多事之秋”的趣店,如今还好吗?
- 软件工程 3:模块化设计
- 王者荣耀刷金币小程序
- 关于支付宝服务商模式的刷卡支付没有分润的问题
- easyexcel 在 设置标题_EasyExcel,让excel导入导出更加简单
- python的环境配置