当前位置:网站首页>【力扣】寻找数组的中心下标
【力扣】寻找数组的中心下标
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;
}
}
边栏推荐
- C语言-6月8日-求两个数的最小公倍数和最大公因数;判断一个数是否为完数,且打印出它的因子
- 脚本自动选择Hierarchy或Project下的对象
- helm安装
- C# 基础之字典——Dictionary(一)
- C语言预处理
- jdbc接口文档参考,jdbc接口方法逻辑探究
- ARM assembly instruction ADR and LDR
- Use the adb command to manage applications
- JS advanced web page special effects (pink teacher notes)
- OpenMLDB v0.5.0 released | Performance, cost, flexibility reach new heights
猜你喜欢
随机推荐
Tinker's self-introduction
C语言-6月12日-字符替换问题,将一个‘ ’替换为2个‘#’
jdbc接口文档参考,jdbc接口方法逻辑探究
Lua loadstring 执行字符串中的代码
Real-time Feature Computing Platform Architecture Methodology and Practice Based on OpenMLDB
脚本批量打包渠道包研究
【LeetCode-34】在排序数组中查找元素的第一个和最后一个位置
OpenGL中glGenBuffers glBindBuffer glBufferData的理解
微信小程序启动页的实现
Lua 快速入门(三)——表(Table)
C# async/await异步操作实例
Content Size Fitter的使用
自己动手写RISC-V的C编译器-02语法描述方法和递归下降解析
Compilation exception resolution
本地缓存cookie的使用
unity小技巧
C-8月1日-递归与动态内存管理
C-动态内存管理
第一章 Verilog语言和Vivado初步使用
Lua 快速入门(四)——多脚本执行