这是悦乐书的第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实现)的更多相关文章

  1. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  2. LeetCode算法题-Design LinkedList(Java实现)

    这是悦乐书的第300次更新,第319篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707).设计链表的实现.您可以选择使用单链表或双链表.单链表中的 ...

  3. LeetCode算法题-Baseball Game(Java实现)

    这是悦乐书的第288次更新,第305篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是682).你现在是棒球比赛点记录器.给定一个字符串列表,每个字符串 ...

  4. LeetCode算法题-Non-decreasing Array(Java实现)

    这是悦乐书的第283次更新,第300篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第151题(顺位题号是665).给定一个包含n个整数的数组,您的任务是通过修改最多1个元 ...

  5. LeetCode算法题-Relative Ranks(Java实现)

    这是悦乐书的第248次更新,第261篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第115题(顺位题号是506).根据N名运动员的得分,找到他们的相对等级和得分最高的三个 ...

  6. LeetCode算法题-String Compression(Java实现)

    这是悦乐书的第230次更新,第242篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第97题(顺位题号是443).给定一组字符,就地压缩它.压缩后的长度必须始终小于或等于原 ...

  7. LeetCode算法题-Binary Watch(Java实现)

    这是悦乐书的第216次更新,第229篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第84题(顺位题号是401).二进制手表顶部有4个LED,代表小时(0-11),底部的6 ...

  8. LeetCode算法题-Nth Digit(Java实现)

    这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...

  9. LeetCode算法题-Move Zeroes(Java实现-三种解法)

    这是悦乐书的第201次更新,第211篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第67题(顺位题号是283).给定一个数组nums,写一个函数将所有0移动到它的末尾,同 ...

随机推荐

  1. SQLServer之修改数据库架构

    修改数据库架构注意事项 用户与架构完全分离. ALTER SCHEMA 仅可用于在同一数据库中的架构之间移动安全对象. 若要更改或删除架构中的安全对象,请使用特定于该安全对象的 ALTER 或 DRO ...

  2. 【English】20190429

    detect发现 [dɪˈtekt] charger充电器 [ˈtʃɑːrdʒər] unable to detect charger

  3. Storm入门(七)可靠性机制代码示例

    一.关联代码 使用maven,代码如下. pom.xml  参考 http://www.cnblogs.com/hd3013779515/p/6970551.html MessageTopology. ...

  4. 【安富莱TCPnet网络教程】HTTP通信实例

    第41章      HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...

  5. PHP mysql查询工具

    PHP基于PDO的 mysql 查询工具 单页面实现,将页面放在任意目录即可. 访问用户 admin 密码 password 代码很简单,主要为了在没有phpMyAdmin时方便执行SQL. 效果如下 ...

  6. pandas 对数据帧DataFrame中数据的索引及切片操作

    1.创建数据帧 index是行索引,即每一行的名字:columns是列索引,即每一列的名字.建立数据帧时行索引和列索引都需要以列表的形式传入. import pandas as pd df = pd. ...

  7. android学习笔记--AlarmManager

    AlarmManager称呼为全局定时器,有的称呼为闹钟.其实它的作用和Timer有点相似. 都有两种相似的用法: (1)在指定时长后执行某项操作(2)周期性的执行某项操作 AlarmManager ...

  8. 一段JAVA代码了解多线程,JUC、CAS原子性操作。

    @Test public void testPaceController_multiThread() throws InterruptedException { final PaceControlle ...

  9. JSP 内置对象(上)

    JSP 内置对象是 Web 容器创建的一组对象,不使用 new 关键字就可以直接使用的对象.如上一章中使用脚本实现打印九九乘法表中的out对象 <%-- 脚本:out对象是JSPWriter类的 ...

  10. matplotlib与numpy

    import matplotlib.pyplot as pltimport numpy as np y = df.loc[0:100, 4].valuesy = np.where(y == 'Iris ...