当前位置: 首页 > 科技观察

一篇文章带你寻找数组的中心下标!

时间:2023-03-12 00:27:55 科技观察

今天给大家介绍的是简单的模拟题。这是美好的一天。从简单的问题开始。哈哈哈求数组的中心下标。题目链接:https://leetcode-cn.com/problems/find-pivot-index/给你一个整数数组nums,请计算数组的中心下标。数组中心下标是数组的一个下标,左边所有元素的和等于右边所有元素的和。如果中心下标在数组的最左端,则认为左边数字之和为0,因为下标左边没有元素。这也适用于数组最右侧的中心下标。如果数组有多个中心下标,则应返回最靠近左侧的那个。如果数组没有中心下标,则返回-1。示例1:输入:nums=[1,7,3,6,5,6]输出:3解释:中心索引为3。左边数字的总和sum=nums[0]+nums[1]+nums[2]=1+7+3=11,右边数的和sum=nums[4]+nums[5]=5+6=11,两者相等。示例2:输入:nums=[1,2,3]输出:-1解释:数组中没有满足此条件的中心下标。示例3:输入:nums=[2,1,-1]输出:0解释:中心索引为0左边数的和sum=0,(下标左边没有元素0),右边数的和sum=nums[1]+nums[2]=1+-1=0。本题思路比较简单直接遍历一次求和。遍历第二遍找到中心索引和leftSum的左半部分。同时根据sum和leftSum计算centerindex和rightSum的右半部分。判断leftSum和rightSum是否相同。C++代码如下:classSolution{public:intpivotIndex(vector&nums){intsum=0;for(intnum:nums)sum+=num;//求和intleftSum=0;//centerindexlefthalfandintrightSum=0;//中心索引右半部分和for(inti=0;iint:numSum=sum(nums)#ArraysumleftSum=0foriinrange(len(nums)):ifnumSum-leftSum-nums[i]==leftSum:#左右相等returnleftSum+=nums[i]return-1GofuncpivotIndex(nums[]int)int{sum:=0for_,v:=rangenums{sum+=v;}leftSum:=0//居中索引左半边右半边Sum:=0//中心索引右半和fori:=0;ia+b);//求和//左半中心索引和右半中心索引andletleftSum=0,rightSum=0;for(leti=0;i