724. 寻找数组的中心索引
方法一:运用数学技巧
1 2 3 4 5 6 7 8 9 10 11 12 | def pivotIndex( self , nums): """ :type nums: List[int] :rtype: int """ sumi = 0 s = sum (nums) for i in range ( len (nums)): if 2 * sumi + nums[i] = = s: return i sumi + = nums[i] return - 1 |
方法二:双指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | class Solution( object ): """ 两个指针(左指针i,右指针j)都从左往右走,统计两边的和,和相等即返回; 由于中心索引可以是所有有效下标: (1)左侧指针从-1开始,左侧累加和初始为零; (2)右侧指针从1开始,右侧累加和初始为:sum(nums) - nums[0]; 循环条件: 右指针指向的下标小于数组长度,即:j < len(nums); 循环体: (1)若相等,则返回i+1 (2)否则,左指针i右移,左侧和累加;右侧和减掉j指针当前指向的元素,再将右指针右移; 另外,考虑到中心索引可能为len-1,所以循环体外需要再判断一次。 """ def pivotIndex( self , nums): """ :type nums: List[int] :rtype: int """ if not nums or len (nums) < 3 : return - 1 i, j = - 1 , 1 sumi, sumj = 0 , sum (nums) - nums[ 0 ] # print(sumi, sumj) while j < len (nums): if sumi = = sumj: return i + 1 else : i + = 1 sumi + = nums[i] # 这里要注意: # 不能先j+=1,再计算sumj,因为当前j指向的值是sumj没有减掉的。 sumj - = nums[j] j + = 1 if sumi = = sumj: return i + 1 return - 1 |
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步