解题技巧之数组与字符串(一)
作者:互联网
【注】题目来源于力扣:数组与字符串
寻找数组的中心索引
这道题我首先想到的是最容易理解的方法:遍历。设置一个for循环和变量i遍历整个数组,再内嵌一个for循环计算下标i之前的元素和frontSum,内嵌一个for循环计算下标i之后的元素和backSum。如果frontSum和backSum相等则返回下标值,如果都为0则返回0,其他情况返回-1。经验证此方法可解,下面附上代码。
class Solution {
public int pivotIndex(int[] nums) {
int N = nums.length-1;
int frontSum,backSum;
for(int i = 0;i<=N;i++){
frontSum = 0;
backSum = 0;
for(int j = 0;j<i;j++){
frontSum += nums[j];
}
for(int n = N;n>i;n--){
backSum += nums[n];
}
if(frontSum == backSum){
return i;
}
if(frontSum == 0 && backSum == 0){
return 0;
}
}
return -1;
}
}
但是这个方法的结果可想而知。
再看看官方的题解。
通过对比这两种方法可以发现,它们的核心数学公式是一样的,区别在于实现过程。下标从小到大遍历数组是必须的,后者第一个优点是:后者多利用了一个隐藏条件即总和,这使得后者只需要计算下标i之前元素的总和。后者第二个优点是:后者利用遍历下标i的时机对下标i之前的元素逐个相加,极大的减少了时间复杂度。
所以为了节约时间复杂度,一定要利用空间复杂度,找出隐藏的条件,尽量减少循环或计算的步骤,并且要思考在每次循环中能做什么,尽量把每个循环的利用率最大化。
标签:遍历,下标,nums,int,backSum,frontSum,数组,字符串,解题技巧 来源: https://blog.csdn.net/qq_41343328/article/details/122805728