leetcode No238. Product of Array Except Self
来源:互联网 发布:复杂网络画图软件 编辑:程序博客网 时间:2024/05/28 19:23
Question:
看到排名较高的算法,只需一遍遍历就可以得到结果,而且空间复杂度为O(1),即用两个数来表示s[]和t[]
Given an array of n integers where n > 1, nums
, return an array output
such that output[i]
is equal to the product of all the elements of nums
except nums[i]
.
Solve it without division and in O(n).
For example, given [1,2,3,4]
, return [24,12,8,6]
.
Algorithm:
以0的个数讨论
1、先求所有非零元素的乘积mul,并求0元素的个数zero_num。
2、以零元素的个数讨论
(1)zero_num = 0,num[i] = mul/num[i];
(2)zero_num = 1,num[i] = mul(if num[i] == 0);num[i] = 0(if num[i] != 0)
(3)zero_num >1,num[i] = 0;
2017/3/3
以上是原来的解法,后来才注意到题目要求不能用除法。。。。
更新算法:
假设我们现在要求下标为i位置的元素的乘积,那么这个乘积是=前(0-i~1)个元素的乘积 * 后(i+1~n)的乘积
令前面的乘积为s[i],后面的乘积为t[i],s[i]=s[i-1]*nums[i-1],t[i]=t[i+1]*nums[i+1]
所以只需从头到尾,从尾到头的扫描一遍就可以得到数组s[]和t[],进而得到结果
Accepted Code:
class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { vector<int> res; if(nums.size() < 1) return res; vector<int> front(nums.size(),1); vector<int> back(nums.size(),1); for(int i=1;i<nums.size();i++) { front[i]=front[i-1]*nums[i-1]; back[nums.size()-i-1]=back[nums.size()-i]*nums[nums.size()-i]; } for(int i=0;i<nums.size();i++) { res.push_back(front[i]*back[i]); } return res; }};
看到排名较高的算法,只需一遍遍历就可以得到结果,而且空间复杂度为O(1),即用两个数来表示s[]和t[]
自己照着思路写了一下,beats 96.63%
class Solution {public: vector<int> productExceptSelf(vector<int>& nums) { int N=nums.size(); vector<int> res(N,1); int frontProduct=1; int backProduct=1; for(int i=0;i<N;i++) { res[i]*=frontProduct; frontProduct*=nums[i]; res[N-1-i]*=backProduct; backProduct*=nums[N-1-i]; } return res; }};
0 0
- leetcode No238. Product of Array Except Self
- [leetcode][array] Product of Array Except Self
- 【LeetCode】237 Product of Array Except Self
- #leetcode#Product of Array Except Self
- leetcode 238: Product of Array Except Self
- [leetcode] 238.Product of Array Except Self
- [leetcode] Product of Array Except Self
- LeetCode Product of Array Except Self
- leetCode(43):Product of Array Except Self
- LeetCode Product of Array Except Self
- 【leetcode】Product of Array Except Self
- 【leetcode】Product of Array Except Self
- leetcode: Product of Array Except Self
- [leetcode] Product of Array Except Self
- [LeetCode] Product of Array Except Self
- Leetcode: Product of Array Except Self
- LeetCode 238: Product of Array Except Self
- LeetCode-Product of Array Except Self
- 网易视频云技术分享:UML调试Linux内核
- 计算原理课堂笔记(二)
- Struts2的国际化和访问资源文件的几种方式
- Activity的生命周期
- iOS设置状态栏样式,statusBarStyle
- leetcode No238. Product of Array Except Self
- Vijos P1352 最大获利
- ZooKeeper dubbo 学习笔录
- 安装新交互英语客户端提示找不到SOAP的解决方案
- mybatis-generator有三种用法
- lsof命令:查看Liunx进程所打开的文件命令
- Android Studio Tips -- 布局预览
- js页面键盘回车事件
- Spring切面通知执行的顺序(Advice Order)