@@ -162,14 +162,14 @@ void rotate(vector<int>& nums, int k)
162162{
163163 k %= nums.size();
164164
165- std:: vector<int> _temp;
165+ vector<int> _temp;
166166 _temp.resize(k);
167167
168168 for (int _j = 0; _j < k; _j++)
169169 _temp[_j] = nums[nums.size() - k + _j];
170170
171171 for (int _i = nums.size() - k - 1; _i >= 0; _i--)
172- std:: swap(nums[_i], nums[k + _i]);
172+ swap(nums[_i], nums[k + _i]);
173173
174174 for (int _m = 0; _m < k; _m++)
175175 nums[_m] = _temp[_m];
@@ -244,7 +244,7 @@ vector<int> productExceptSelf(vector<int>& nums)
244244 for (int left = 0; left < n; left++)
245245 {
246246 right = (n - 1) - left;
247-
247+
248248 ans[left] *= lp;
249249 lp *= nums[left];
250250
@@ -255,6 +255,33 @@ vector<int> productExceptSelf(vector<int>& nums)
255255}
256256```
257257
258+ - 上面这个有点抽象,下面这个算是兼具效率(不消耗额外空间)和易读性的版本
259+
260+ ```cpp
261+ vector<int> productExceptSelf(vector<int>& nums)
262+ {
263+ int n = nums.size();
264+ vector<int> ans; ans.resize(n, 1);
265+
266+ //从左到右,计算左侧累积乘积
267+ int accum = 1;
268+ for (int i = 0; i < n; i++)
269+ {
270+ ans[i] *= accum;
271+ accum *= nums[i];
272+ }
273+ //从右到左,计算右侧累积乘积
274+ accum = 1;
275+ for (int i = n - 1; i >= 0; i--)
276+ {
277+ ans[i] *= accum;
278+ accum *= nums[i];
279+ }
280+
281+ return ans;
282+ }
283+ ```
284+
258285#### [ 和为K的子数组] ( https://leetcode.cn/problems/subarray-sum-equals-k/?envType=study-plan-v2&envId=top-100-liked )
259286- 暴力枚举法,高时间复杂度,低空间复杂度
260287
@@ -657,7 +684,7 @@ vector<int> maxSlidingWindow(vector<int>& nums, int k)
657684void bubble (vector<int >& nums, int begin, int end)
658685{
659686 for (int i = begin; i < end; i++)
660- std:: swap(nums[i], nums[i+1]);
687+ swap(nums[ i] , nums[ i+1] );
661688}
662689
663690void moveZeroes(vector<int >& nums)
0 commit comments