• 724. 寻找数组的中心下标


    1、题目描述

    2、解决方法

    2-1、暴力法 

            顺着题目思路走,遍历每个下标,分别计算下标左边的汇总和和下标右边的汇总和,这个想法很好理解,没有任何技巧。需要注意的就是涉及到边界情况:

    边界情况1:  数组为null, 则不存在这样的下标,返回-1;

    边界情况2:  存在数组元素,且元素个数有且就是1个,这样想想自然这个元素左边和右边都没有数据,左边汇总和=右边汇总和=0,返回下标0;

    边界情况3: 存在数组元素,且目标下标在边界处,特殊处理:

    1. if(nums.length > 1 && getSum(nums,l+1,r) == 0){
    2. return l;
    3. }

    最后进行全遍历,这个逻辑说实话在自测的时候,经常有case异常,因此后续追加了几次边界情况,完全不推荐!完整代码如下:

    1. class Solution {
    2. public int pivotIndex(int[] nums) {
    3. if(nums==null || nums.length == 0) return -1;
    4. if(nums.length == 1 ) return 0;
    5. int l = 0; int r = nums.length-1;
    6. //初始化模式
    7. if(nums.length > 1 && getSum(nums,l+1,r) == 0){
    8. return l;
    9. }
    10. for(int i = 1; i < nums.length; i++){
    11. int sum1 = getSum(nums, l, i-1);
    12. int sum2 = getSum(nums,i+1,r);
    13. if(sum1 ==sum2)
    14. return i;
    15. }
    16. return -1;
    17. }
    18. private int getSum(int[] nums, int start, int end){
    19. int sum = 0;
    20. for(int i = start; i<= end; i++){
    21. sum += nums[i];
    22. }
    23. return sum;
    24. }
    25. }

    复杂度分析

    • 时间复杂度:O(n^2),其中 n 为数组的长度。

    • 空间复杂度:O(1)。

    备注:很不推荐,容易缺失边界情况,时间复杂度还高。

    2-2、求和法(推荐)

    这个思路是看官方解题思路,相对简单很多,还不用考虑多种边界特殊情况,解决方法也相对简单很多,思路很巧妙。

    【备注】可以使用现成的求和方法:int total = Arrays.stream(nums).sum();

    1、求和获取 total.

    2、两边的汇总和,设置为2*sum

    3、存在恒等式,2*sum+nums[i] = total; 

    此时也无需考虑多种特殊边界情况,这种逻辑所有情况均满足。完整代码如下:

    1. class Solution {
    2. public int pivotIndex(int[] nums) {
    3. int total = Arrays.stream(nums).sum();
    4. int sum = 0;
    5. for(int i = 0; i< nums.length; i++){
    6. if(2 * sum +nums[i]==total)
    7. return i;
    8. sum += nums[i];
    9. }
    10. return -1;
    11. }
    12. }

    复杂度分析

    • 时间复杂度:O(n),其中 n 为数组的长度。

    • 空间复杂度:O(1)。

  • 相关阅读:
    奇安信笔试C++
    如何在Vue中引入video.js,并如何监听相关事件,禁止拖拽
    Linux--线程概念+线程控制
    Leetcode1833. 雪糕的最大数量
    EDU实战-SQL注入漏洞
    HDFS 分布式环境搭建
    无线传感器网络
    windows下redis 哨兵配置
    2022牛客多校3 A-Ancestor(求LCA前后缀)
    快速体验 Flink Table Store 入门篇
  • 原文地址:https://blog.csdn.net/huihuiaiyangyang/article/details/125466557