163、寻找数组的中心索引

给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。

我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。

如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。

示例 1:

输入:
nums = [1, 7, 3, 6, 5, 6]
输出: 3
解释:
索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。
同时, 3 也是第一个符合要求的中心索引。
示例 2:

输入:
nums = [1, 2, 3]
输出: -1
解释:
数组中不存在满足此条件的中心索引。
说明:

nums 的长度范围为 [0, 10000]。
任何一个 nums[i] 将会是一个范围在 [-1000, 1000]的整数。

妈耶,这道题其实没什么难度的,一开始我以为数组的数字全是正数,按照那个思路来,那么设置一个前后指针就完事了,但是一提交发现有负数,那么肯定不能使用那个方法了
最后得出的是
代码,由于我没有判断第0个和最后一个,这是在测试中得出的,如果是第零个,那么只要判断除了第0个之外其余元素之和是否为0即可,同理,如果是最后一个也是如此,效率不是很高,

class Solution {
    public int pivotIndex(int[] nums) {
       if(nums.length == 0){
			return -1;
		}
        int index = 0;
		int sumA = nums[0];
		int sumB = 0;
		int end = nums.length - 1;
		for (int i : nums) {
			sumB += i;
		}
        int s= sumB;
        if(sumB - nums[0] == 0 ){
			return 0;
		}
        
		//初始化的是1是否是的
		sumB  = sumB - nums[0] - nums[1];
		for (int i = 1; i < nums.length -1; i++) {
			if(sumA == sumB){
				return index + 1;
			}else {
				sumA +=nums[index + 1];
				index ++;
				sumB -=nums[index + 1];
			}
		}
        if(s - nums[nums.length-1] == 0){
            return nums.length-1;
        }
		return -1; 
    }
}

适合全是正数的数组,使用的是双向指针
代码

// 如果只出现的是正数可以用下面这个,但是如果出现的是负数那么可能要换种方法
		 if(nums.length == 0){
			return -1;
		}
		int start = 0;
		int end = nums.length - 1;
		int presum = nums[start];
		int endsum = nums[end];
		while (start < end) {
			if(presum > endsum){
				end--;
				endsum +=nums[end];
			}else if(presum < endsum){
				start ++;
				presum +=nums[start];
			}else {
				if(start + 1 == end - 1){
					return start +1;
				}else {
					end--;
					start++;
				}
			}
		}
        return -1;

排名靠前的代码,思路差不多

class Solution {
    public int pivotIndex(int[] nums) {
        int sum = 0;
		for (int i = 0; i < nums.length; i++) {
			sum += nums[i];
		}
		int tmpSum = 0;
		for (int i = 0; i < nums.length; i++) {
			if (tmpSum == sum - tmpSum - nums[i]) {
				return i;
			}
			tmpSum += nums[i];
		}
		return -1;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34446716/article/details/85839835
今日推荐