当前位置:网站首页>【力扣】寻找数组的中心下标
【力扣】寻找数组的中心下标
2022-08-11 05:31:00 【爱吃西瓜爱吃肉】
题目:给你一个整数数组 nums ,请计算数组的 中心下标 。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。
题目分析:大概意思是说,数组中找到一个数,数左边总和等于右边总和。如果有两个就返回最左边的索引。
两种方法:
那么首先想到的就是暴力解法,两个for循环,外层循环计算左边的总和,内层计算每次右边的总和,然后比较左右总和是否相等,相等直接返回(因为如果有多个,需要最左边的),计算完比较一次记得将右总和清零。
class Solution {
public int pivotIndex(int[] nums) {
int leftSum=0;
int rightSum=0;
int n=-1;
for(int i=0;i<nums.length;i++){
leftSum+=nums[i];
for(int j=i;j<nums.length;j++){
rightSum+=nums[j];
}
if(leftSum==rightSum){
n = i;
return n;
}
rightSum=0;
}
return n;
}
}方法二:
跟方法一不同,不计算左右两边的总和。只需要计算一边的总和,因为如果符合要求,左右两边相等。所以数左边总和*2+该数=全部总和,如果作总和包含该数,公式就是:
左总和*2-该数=全部总和
class Solution {
public int pivotIndex(int[] nums) {
int sum=0;
int leftSum=0;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
}
for(int j=0;j<nums.length;j++){
leftSum+=nums[j];
if(leftSum*2-nums[j]==sum){
return j;
}
}
return -1;
}
}
边栏推荐
猜你喜欢

【LeetCod】三数之和-15

gerrit configure SSH Key and account, email information

OpenGL中glGenBuffers glBindBuffer glBufferData的理解

stack stack

UE4打包工程失败问题记录

C-8月1日-递归与动态内存管理

微信小程序_开发工具的安装

解决npm warn config global `--global`, `--local` are deprecated. use `--location=global` instead.

IndexError: index 9 is out of bounds for axis 0 with size 9;数组下标溢出问题

一文看懂注解与反射
随机推荐
2021年vscode终端设置为bash模式
The whole process of Tinker access --- Compilation
8-byte standard request parsing during USB enumeration
C语言-6月12日-字符替换问题,将一个‘ ’替换为2个‘#’
PAT乙级刷题之路
Day 81
js learning advanced (event senior pink teacher teaching notes)
无效的修订:3.18.1-g262b901-dirty
C# 基础之字典——Dictionary(一)
Dark Horse Event Project
程序集与反射技术(C#)
C语言-6月8日-求两个数的最小公倍数和最大公因数;判断一个数是否为完数,且打印出它的因子
【LeetCode-73】矩阵置零
Jetpack's dataBinding
Manufacturer Push Platform-Huawei Access
【LeetCode-34】在排序数组中查找元素的第一个和最后一个位置
Unity的程序集Assembly 与 加快代码编译速度
【Unity】关于一个炮台Prefab的剖析
Node stepping on the pit 80 port is occupied
将UI的点击事件渗透下去