其他分享
首页 > 其他分享> > 解题技巧之数组与字符串(一)

解题技巧之数组与字符串(一)

作者:互联网

【注】题目来源于力扣:数组与字符串

寻找数组的中心索引

在这里插入图片描述
  这道题我首先想到的是最容易理解的方法:遍历。设置一个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