• 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)。

  • 相关阅读:
    【OceanBase系列】—— 常用 SQL
    【2016】【论文笔记】差频可调谐THz技术——
    maven+mybatis—实现数据库中图书信息的增删改查
    从模型复杂度角度来理解过拟合现象
    ch1_系统启动_bootsect.s
    Vue09/Vue 配置二级路由实现路由嵌套 、组件缓存 keep-alive 和 keep-alive属性方法及两个钩子函数
    一种通过注解处理数据权限设计整理
    Java+MySQL 基于Springboot的垃圾分类网站-计算机毕业设计
    从 Clickhouse 到 Apache Doris:有赞业务场景下性能测试与迁移验证
    【RabbitMQ实战】05 RabbitMQ后台管理
  • 原文地址:https://blog.csdn.net/huihuiaiyangyang/article/details/125466557