LeetCode算法题-Find Pivot Index(Java实现)
这是悦乐书的第304次更新,第323篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第172题(顺位题号是724)。给定一个整数nums数组,编写一个返回此数组的“pivot”索引的方法。我们将pivot索引定义为索引,其中索引左边的数字之和等于索引右边的数字之和。如果不存在这样的索引,我们应该返回-1。 如果有多个数据透视索引,则应返回最左侧的数据透视索引。例如:
输入:nums = [1,7,3,6,5,6]
输出:3
说明:索引3左侧的数字之和(nums [3] = 6)等于索引3右侧的数字之和。此外,3是发生这种情况的第一个索引。
输入:nums = [1,2,3]
输出:-1
说明:没有索引满足问题陈述中的条件。
注意:
nums的长度将在[0,10000]范围内。
每个元素nums[i]将是[-1000,1000]范围内的整数。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
题目的意思是找到数组中的一个元素所在索引,使该元素左右两边剩下的元素之和相等,对此我们需要将左边元素之和和右边元素之和计算出来,直到两者相等,也就找到来了该元素所在的位置,没有旧返回-1。
先将数组的所有元素之和计算出来,然后从左往右遍历数组元素,开始计算当前元素左边元素之和,因为第一位元素左边不存在元素,所以第一次计算得到的左边元素之和为0,而右边元素之和则为总和减去左边之和再减去当前元素,判断两者是否相等即可。
public int pivotIndex(int[] nums) {
int leftsum = 0;
int rightsum = 0;
int sum = 0;
for (int i=0; i<nums.length; i++) {
sum += nums[i];
}
for (int i=0; i<nums.length; i++) {
leftsum += i == 0 ? 0 : nums[i-1];
rightsum = sum - leftsum - nums[i];
if (leftsum == rightsum) {
return i;
}
}
return -1;
}
03 第二种解法
我们可以对上面的写法再简化下,但是思路还是一样的。同样是将总和先计算出来,然后从左往右遍历数组,另外定义一个变量,计算当前左边元素之和,在计算左边之和前,需要先判断当前元素左右两边之和是否相等,在先进行判断时,当前左边元素之和始终是上一次计算的结果,而总和减去当前元素剩下的值,如果满足题目条件,是左边元素之和的两倍。
public int pivotIndex2(int[] nums) {
int sum = 0;
for (int i=0; i<nums.length; i++) {
sum += nums[i];
}
int currentSum = 0;
for (int i=0; i<nums.length; i++) {
if (sum - nums[i] == 2*currentSum) {
return i;
}
currentSum += nums[i];
}
return -1;
}
04 小结
算法专题目前已日更超过五个月,算法题文章172+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Find Pivot Index(Java实现)的更多相关文章
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
- LeetCode算法题-Design LinkedList(Java实现)
这是悦乐书的第300次更新,第319篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707).设计链表的实现.您可以选择使用单链表或双链表.单链表中的 ...
- LeetCode算法题-Baseball Game(Java实现)
这是悦乐书的第288次更新,第305篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是682).你现在是棒球比赛点记录器.给定一个字符串列表,每个字符串 ...
- LeetCode算法题-Non-decreasing Array(Java实现)
这是悦乐书的第283次更新,第300篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第151题(顺位题号是665).给定一个包含n个整数的数组,您的任务是通过修改最多1个元 ...
- LeetCode算法题-Relative Ranks(Java实现)
这是悦乐书的第248次更新,第261篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第115题(顺位题号是506).根据N名运动员的得分,找到他们的相对等级和得分最高的三个 ...
- LeetCode算法题-String Compression(Java实现)
这是悦乐书的第230次更新,第242篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第97题(顺位题号是443).给定一组字符,就地压缩它.压缩后的长度必须始终小于或等于原 ...
- LeetCode算法题-Binary Watch(Java实现)
这是悦乐书的第216次更新,第229篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第84题(顺位题号是401).二进制手表顶部有4个LED,代表小时(0-11),底部的6 ...
- LeetCode算法题-Nth Digit(Java实现)
这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...
- LeetCode算法题-Move Zeroes(Java实现-三种解法)
这是悦乐书的第201次更新,第211篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第67题(顺位题号是283).给定一个数组nums,写一个函数将所有0移动到它的末尾,同 ...
随机推荐
- Python之路【第六篇】:Python迭代器、生成器、面向过程编程
阅读目录 一.迭代器 1.迭代的概念 #迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 代码如下: while True: ...
- python全栈目录
Python Python开发[第一篇]:初识 Python开发[第二篇]:基本数据类型 Python开发[第三篇]:函数 Python开发[第四篇]:杂货铺 Python开发[第五篇]:模块 Pyt ...
- Web前端 前端工程师首选的几款编辑器/IDE以及Markdown的编辑器、语法
前端工程师常使用的编辑器/IDE 本地在线工具 webstrom 推荐指数 ***** vs code 推荐指数 **** atom 推荐指数 **** subline-text 推荐指数 **** ...
- Exp4恶意代码分析 20164312 马孝涛
1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,sy ...
- OutOfMemoryError/OOM/内存溢出异常实例分析--虚拟机栈和本地方法栈溢出
关于虚拟机栈和本地方法栈,在JVM规范中描述了两种异常: 1.如果线程请求的栈深度大于JVM所允许的深度,将抛出StackOverflowError异常: 2.如果虚拟机在扩展栈时无法申请到足够的内存 ...
- Linux内存管理 (5)slab分配器
专题:Linux内存管理专题 关键词:slab/slub/slob.slab描述符.kmalloc.本地/共享对象缓冲池.slabs_partial/slabs_full/slabs_free.ava ...
- Dapeng框架-开源高性能分布式微服务框架
我们公司性质是新零售,公司也有专门的框架组.这群大牛自己开发了一整套分布式微服务框架.我们也在使用这套框架,有很多心得体会. 该框架既Dapeng也!开源github地址:https://github ...
- redis发布订阅Java代码实现
Redis除了可以用作缓存数据外,另一个重要用途是它实现了发布订阅(pub/sub)消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 为了实现redis的发布订阅机制,首先要打开re ...
- pytorch autograd backward函数中 retain_graph参数的作用,简单例子分析,以及create_graph参数的作用
retain_graph参数的作用 官方定义: retain_graph (bool, optional) – If False, the graph used to compute the grad ...
- Vue2.0源码阅读笔记(二):响应式原理
Vue是数据驱动的框架,在修改数据时,视图会进行更新.数据响应式系统使得状态管理变的简单直接,在开发过程中减少与DOM元素的接触.而深入学习其中的原理十分有必要,能够回避一些常见的问题,使开发变的 ...