美文网首页
【算法】寻找数组中心下标 - 双指针/求总和

【算法】寻找数组中心下标 - 双指针/求总和

作者: 王月亮17 | 来源:发表于2024-04-04 10:49 被阅读0次

题目

给定一个非空数组,找到一个元素,该元素左侧元素和等于其右侧元素和,返回该元素下标。
如果没有则返回-1,有多个则返回最左侧一个。

原理

1、双指针

定义两个变量,一个为从左侧累加的和 leftSum = 0,一个从右侧递减的和 rightSum,rightSum初始值为整个数组的和。
遍历数组,每次遍历先让 leftSum + 当前元素,此时两个Sum都包含当前元素,如果两个Sum相等,则当前元素为中心元素;否则让 rightSum 减去当前元素,如此循环即可。

2、求总和

定义两个变量,一个 sum = 0,一个 arraySum,初始化为整个数组的和。
遍历数组,当 sum * 2 + 当前元素 = arraySum时,当前元素即为中心元素,不想等则让 sum 加上当前元素。因为中心元素两侧的和相等,即两侧的和实际为 sum * 2。

代码

1、双指针

    public static void main(String[] args) {
        System.out.println(findCenterIndex(new int[]{1, 7, 3, 6, 5, 6}));
    }

    public static int findCenterIndex(int[] nums) {
        int rightSum = Arrays.stream(nums).sum();
        int leftSum = 0;
        for (int i = 0; i < nums.length; i++) {
            leftSum += nums[i];
            if (leftSum == rightSum) {
                return i;
            }
            rightSum -= nums[i];
        }
        return -1;
    }

2、求总和

    public static void main(String[] args) {
        System.out.println(findCenterIndex2(new int[]{1, 7, 3, 6, 5, 6}));
    }

    public static int findCenterIndex2(int[] nums) {
        int arraySum = Arrays.stream(nums).sum();
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            if (sum * 2 + nums[i] == arraySum) {
                return i;
            }
            sum += nums[i];
        }
        return -1;
    }

相关文章

  • 算法分析 [折半,字符串] 2019-02-21

    1. 折半 1.1 从一维数组中求一个值/下标 724.寻找数组的中心索引 Find Pivot Index me...

  • 【剑指offer-双指针】

    导读 算法 | 双指针套路总结 常用的双指针技巧 算法与数据结构基础 - 双指针 目录: 面试题04. 二维数组中...

  • 快慢指针-链表

    实际上,双指针是一个很笼统的概念。只要在解题时用到了两个指针(链表指针、数组下标皆可),都可以叫做双指针方法。根据...

  • KMP算法

    字符串匹配算法之KMP KMP算法最主要的地方是求next数组,next数组保存的是当前失配节点(下标index)...

  • 算法笔记之双指针(数组)

    双指针 双指针法一般用来解决数组和链表等线性数据结构中的一些问题,在数组中一般使用2个下标,在链表中一般是2个指针...

  • 指针与数组(2)

    本章主要整理归纳指针数组、数组指针、数组下标、多维数组的概念 链接上回:指针与数组(1) 上一回,提到了指针变量i...

  • LeetCode进阶977-双指针

    概要 双指针是一种比较常见的算法思想,在循环遍历数组时经常会用到。双指针主要有两种算法技巧:1、快慢指针(例如已发...

  • 二维数组和指针(20161215)

    缺少内容:实例程序,需要进一步理解数组和指针一、数组1、二维数组行下标可以省,列下标不可以省2、指针(1)指针类型...

  • 移除数组中的元素

    移除数组中的元素,双指针算法,利用元数组元素覆盖的方式,利用指针移动到指定的元素,即可一次便利实现

  • 寻找数组的中心索引【LeetCode】

    给你一个整数数组 nums,请编写一个能够返回数组 “中心下标” 的方法。 数组 中心下标 是数组的一个下标,其左...

网友评论

      本文标题:【算法】寻找数组中心下标 - 双指针/求总和

      本文链接:https://www.haomeiwen.com/subject/mwsntjtx.html