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移动到它的末尾,同 ...
随机推荐
- Codeforces Round #539 (Div. 2) - D. Sasha and One More Name(思维)
Problem Codeforces Round #539 (Div. 2) - D. Sasha and One More Name Time Limit: 1000 mSec Problem ...
- pandas 获取数据帧DataFrame的行、列数
1.创建数据帧 import pandas as pd df = pd.DataFrame([[1, 'A', '3%' ], [2, 'B']], index=['row_0', 'row_1'], ...
- 查看网卡及对应的IP、MAC
#!/bin/bash# judge OS OS_release=`cat /etc/redhat-release | awk '{print $(NF-1)}'|cut -c 1`# To obta ...
- 从壹开始前后端分离 [ vue + .netcore 补充教程 ] 二九║ Nuxt实战:异步实现数据双端渲染
回顾 哈喽大家好!又是元气满满的周~~~二哈哈,不知道大家中秋节过的如何,马上又是国庆节了,博主我将通过三天的时间,给大家把项目二的数据添上(这里强调下,填充数据不是最重要的,最重要的是要配合着让大家 ...
- mysql的学习笔记(七)
1.自定义函数,函数可以返回任意类型的值,同样可接说这些类型的参数. CREATE FUNCTION function_name RETURNS {STRING|INTER|REAL|DECIMAL} ...
- LogUtil【实现自由的控制日志的打印的封装类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要用于控制项目开发和上线阶段日志的打印. 效果图 暂不需要. 代码分析 在LogUtil类中声明代表不同日志级别的常量值(VERB ...
- MyBatis-plus二级缓存使用
MyBatis二级缓存使用 注意点: 在最新的3.x版本,实现二级缓存的配置也有了一些改变. 官方建议在service使用缓存,但是你也可以直接在mapper层缓存,这里的二级缓存就是直接在Mappe ...
- 当代前端应该怎么写这个hello world?
前言 大概16年的时候我们队react进行了简单的学习:从DOM操作看Vue&React的前端组件化,顺带补齐React的demo,当时我们只是站在框架角度在学习,随着近几年前端的变化,想写个 ...
- Asp.NetCore轻松学-业务重点-实现一个简单的手机号码验证
前言 本文纯干货,直接拿走使用,不用付费.在业务开发中,手机号码验证是我们常常需要面对的问题,目前市场上各种各样的手机号码验证方式,比如正则表达式等等,本文结合实际业务场景,在业务级别对手机号 ...
- 搞懂Redis到底快在哪里
前言 Redis是一种基于键值对(Key-Value)的NoSQL数据库,Redis的Value可以由String,hash,list,set,zset,Bitmaps,HyperLogLog等多种数 ...