LeetCode--寻找数组中心索引

题目

给定一个整数类型的数组 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]的整数。

解答

解答一:

最笨的方法:遍历整个数组:从第二个元素开始假定为中间索引,判断左边右边总数和。如果相等返回中间元素即为答案。否则返回-1不存在。上代码:

public class MiddleIndex {
public static int pivotIndex(int[] nums){
//声明左右两个总和变量
int sumLeft=0,sumRight=0;
for(int i=0;i<nums.length;i++){
for(int j=0;j<i;j++){
sumLeft += nums[j];
}
for(int x=i+1;x<nums.length;x++){
sumRight += nums[x];
}
if(sumLeft == sumRight){
System.out.println(i);
return i;
}
sumLeft=0;
sumRight=0;
}
System.out.println(-1);
return -1;
}

public static void main(String[] args) {
int[] nums = {1, 1, 3, 6, 5, 6};
MiddleIndex.pivotIndex(nums);
}

}

解答二:

计算总和,然后遍历数组进行左右总和判断。

//遍历数组总和。判断两遍值是否相等
public static int pivotIndex2(int[] nums){
int sumLeft=0,sumRight=0;
for(int i=1;i<nums.length;i++){
sumRight += nums[i];
}
if(nums.length==0){
return -1;
}
if(sumRight==0){
return 0;
}
for(int i=1;i<nums.length;i++){
sumLeft += nums[i-1];
sumRight -= nums[i];
if(sumLeft == sumRight) {
System.out.println(i);
return i;
}
}
System.out.println(-1);
return -1;
}

 

 

posted on 2019-10-17 15:39  王泱钧的Java小站  阅读(238)  评论(0)    收藏  举报

导航