寻找数组的中心下标
目录
一:题目链接
二:题目思路
三:代码实现
一:题目链接
二:题目思路
对于这道题,我们很容易想到可以使用前缀和的算法来解决,但是,使用一个前缀和数组还不够,要使用两个前缀和数组,一个记录数组前面的前缀和,一个记录数组后面的 “后缀和” ,具体前缀和数组 first_dp 如图:
与我们之前所讲的前缀和有点不一样,这里的前缀和不包括当前位置的元素,而是这位置之前的元素和,同理, “后缀和” 数组 end_dp 如图:
这样做的好处是,后续从左往右遍历下标能直接比较左右的前缀和。
三:代码实现
int n = nums.length;int[] first_dp = new int[n];int[] end_dp = new int[n];//初始化 dp 表for(int i = 1;i < n;i++) {first_dp[i] = first_dp[i - 1] + nums[i - 1];}for(int i = n - 2;i >= 0;i--) {end_dp[i] = end_dp[i + 1] + nums[i + 1];}//从左到右寻找符合条件的下标for(int i = 0;i < n;i++) {if(first_dp[i] == end_dp[i]) {return i;}}return -1;