记录:今天是Datawhale打卡活动的最后一天,坚持了七天,其实坚持七天没什么值得炫耀的,还有些大牛坚持了一年或者两年,相比之下,连车尾灯都见不着。刷Leetcode也许会成为以后每一天的任务,刷题写博客记录轨迹。其实我很爱写笔记的,哈哈,只不过之前一直在OneNote上写,写了半年多了,大概有快一百篇笔记了吧(hhh,我是OneNote的粉)。Datawhale是个好的学习组织,崇尚开源精神,大家以后可以继续加入。做技术,开源是一件很令人敬佩的事情,小白的我目前技术还不行,没能给开源界带来奉献 (ㄒoㄒ)//
题目:https://leetcode-cn.com/problems/product-of-array-except-self/
思路:
- 定义一个输出数组(题目中这样表示 出于对空间复杂度分析的目的,输出数组不被视为额外空间),先从输出数组1号下表开始,把它之前的 所有元素乘积的值作为该位置的值,一次遍历到尾,每个输出数组里都存着它之前所有元素的乘积。接着从尾部开始向前遍历,我们从倒数第二个元素开始,在数组的基础上乘以它之后的所有元素的值,遍历到头部。结束,这样一来,每个输出数组都满足它之前所有的元素乘以它之后所有的元素。
vector<int> productExceptSelf(vector<int>& nums) { if( nums.size() <= 0 ) return vector<int>(); vector<int>vec( nums.size(), 1 ); for( int i = 1; i < nums.size(); ++i ) vec[ i ] = nums[ i - 1 ] * vec[ i - 1 ]; // 该下标之前的所有元素的乘积 for( int i = nums.size() - 2, temp = 1; i >= 0; --i ) { temp *= nums[ i + 1 ]; vec[ i ] *= temp; //在原来的基础上乘以该下标之后所有的乘积 } return vec; }