做视频网站注意什么软件,邯郸做wap网站的地方,添加网站描述,移动通网站建设【LeetCode刷题】Day 15 题目1#xff1a;742.寻找数组的中心下标思路分析#xff1a;思路1#xff1a;前缀和思想 题目2#xff1a;238.除自身以外数组的乘积思路分析思路1#xff1a;前缀和思想 题目1#xff1a;742.寻找数组的中心下标 思路分析#xff1a;
其实题干… 【LeetCode刷题】Day 15 题目1742.寻找数组的中心下标思路分析思路1前缀和思想 题目2238.除自身以外数组的乘积思路分析思路1前缀和思想 题目1742.寻找数组的中心下标 思路分析
其实题干说的很明白了就是在表述某个位置的前半部分数组和与后半部分数组和的结果相同就是中心下标。 这里明显就是前缀和来求解。
思路1前缀和思想
前半部分的和与后半部分的和分别用前缀和f数组后缀和g数组来表示。 前缀和ff[i]表示从数组开始位置到下标为i前一个位置[0,i-1]的总和 后缀和gg[i]表示数组最后一个位置到下标为i位置的后一个位置[i1,n-1]的总和
fg数组的递推公式如下
//前缀和数组f的递推公式:
f[i] f[i-1] nums[i-1];
//后缀和数组g的递推公式:
g[i] g[i1] nums[i1];注意细节问题
初始化前缀和f 当i0时也就是0的前面的和我们需要设置为0,即f[0]0。同理后缀和g in-1时表示数组中最后一个元素后的和也同样设置为0即g[n-1]0。越界问题f数组i从1开始建立这样才能保证i-1不越界。g数组i从n-2开始才不会越界。
代码实现
class Solution {
public:int pivotIndex(vectorint nums) {int nnums.size();vectorint f(n),g(n); //此处已经把f[0]和g[n-1]默认初始化为0了。//1.预处理前缀和数组f后缀和数组g。for(int i1;in;i) f[i]f[i-1]nums[i-1];for(int in-2;i0;i--)g[i]g[i1]nums[i1];//2.使用前缀和数组和后缀和数组。for(int i0;in;i)if(f[i]g[i]) return i;return -1;}
};LeetCode链接742.寻找数组的中心下标 题目2238.除自身以外数组的乘积 思路分析
思路其实题目已经说的很明显了唯一要注意的是初始化化这里是乘法所以初始值为1。
思路1前缀和思想
所得的最后数组地每一个位置元素是由该元素前面区间的乘积来和后面区间的乘积相乘的出来的。所以前缀和思想很合适。 代码实现
class Solution {
public:vectorint productExceptSelf(vectorint nums) {int nnums.size();vectorint ret(n);vectorint f(n,1),g(n,1); //1.预处理前缀和后缀数组for(int i1;in;i)f[i]f[i-1]*nums[i-1];for(int in-2;i0;i--)g[i]g[i1]*nums[i1];//2.使用前缀和后缀数组for(int i0;in;i)ret[i]f[i]*g[i];return ret;}
};LeetCode链接238.除自身以外数组的乘积 ✨享受平静也努力向上 平静是幸福努力学习也是幸福 ~天天开心