C#LeetCode刷题之#724-寻找数组的中心索引( Find Pivot Index)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3742 访问。
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。
我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
输入: nums = [1, 7, 3, 6, 5, 6]
输出: 3
解释: 索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。同时, 3 也是第一个符合要求的中心索引。
输入: nums = [1, 2, 3]
输出: -1
解释: 数组中不存在满足此条件的中心索引。
说明:
nums 的长度范围为 [0, 10000]。
任何一个 nums[i] 将会是一个范围在 [-1000, 1000]的整数。
Given an array of integers nums, write a method that returns the "pivot" index of this array.
We define the pivot index as the index where the sum of the numbers to the left of the index is equal to the sum of the numbers to the right of the index.
If no such index exists, we should return -1. If there are multiple pivot indexes, you should return the left-most pivot index.
Input: nums = [1, 7, 3, 6, 5, 6]
Output: 3
Explanation: The sum of the numbers to the left of index 3 (nums[3] = 6) is equal to the sum of numbers to the right of index 3.
Also, 3 is the first index where this occurs.
Input: nums = [1, 2, 3]
Output: -1
Explanation: There is no index that satisfies the conditions in the problem statement.
Note:
The length of nums will be in the range [0, 10000].
Each element nums[i] will be an integer in the range [-1000, 1000].
示例
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3742 访问。
public class Program {
public static void Main(string[] args) {
int[] nums = null;
nums = new int[] { 1, 7, 3, 6, 5, 6 };
var res = PivotIndex(nums);
Console.WriteLine(res);
nums = new int[] { 1, 2, 3 };
res = PivotIndex2(nums);
Console.WriteLine(res);
nums = new int[] { -1, -1, -1, 0, 0, 1, 1 };
res = PivotIndex3(nums);
Console.WriteLine(res);
Console.ReadKey();
}
private static int PivotIndex(int[] nums) {
//暴力解法
for(int i = 0; i < nums.Length; i++) {
if(ComputerLeft(nums, i) == ComputerRight(nums, i)) {
return i;
}
}
return -1;
}
private static int ComputerLeft(int[] nums, int index) {
int sum = 0;
for(int i = 0; i < index; i++) {
sum += nums[i];
}
return sum;
}
private static int ComputerRight(int[] nums, int index) {
int sum = 0;
for(int i = index + 1; i < nums.Length; i++) {
sum += nums[i];
}
return sum;
}
private static int PivotIndex2(int[] nums) {
//和数组解法,先存下所有之前的数的和再分析
if(nums.Length == 0) return -1;
int[] sums = new int[nums.Length];
sums[0] = nums[0];
for(int i = 1; i < nums.Length; i++) {
sums[i] = sums[i - 1] + nums[i];
}
//边界处理
if(sums[nums.Length - 1] == sums[0]) return 0;
for(int i = 1; i < nums.Length; i++) {
//比较之前的和、之前的和是否相等
if(sums[i - 1] == sums[nums.Length - 1] - sums[i]) {
return i;
}
}
return -1;
}
private static int PivotIndex3(int[] nums) {
//解法和思路同下面注释掉的代码部分
int sum = 0;
for(int k = 0; k < nums.Length; k++) {
sum += nums[k];
}
int leftSum = 0;
int i = 0, j = nums.Length - 1;
while(i <= j) {
if((sum -= nums[i]) == leftSum) return i;
leftSum += nums[i++];
}
return -1;
//int leftSum = 0;
//for(int i = 0; i < nums.Length; i++) {
// sum -= nums[i];
// if(leftSum == sum)
// return i;
// leftSum += nums[i];
//}
//return -1;
}
}
以上给出3种算法实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3742 访问。
3
-1
0
分析:
显而易见,PivotIndex的时间复杂度为: ,PivotIndex2和PivotIndex3的时间复杂度为:
。
C#LeetCode刷题之#724-寻找数组的中心索引( Find Pivot Index)的更多相关文章
- [Swift]LeetCode724. 寻找数组的中心索引 | Find Pivot Index
Given an array of integers nums, write a method that returns the "pivot" index of this arr ...
- Java实现 LeetCode 724 寻找数组的中心索引(暴力)
724. 寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧 ...
- C#LeetCode刷题之#852-山脉数组的峰顶索引(Peak Index in a Mountain Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4003 访问. 我们把符合下列属性的数组 A 称作山脉: A.le ...
- 【LeetCode】724. 寻找数组的中心下标
724. 寻找数组的中心下标 知识点:数组:前缀和: 题目描述 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的 ...
- LeetCode:寻找数组的中心索引【668】
LeetCode:寻找数组的中心索引[668] 题目描述 给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和 ...
- Leetcode之二分法专题-852. 山脉数组的峰顶索引(Peak Index in a Mountain Array)
Leetcode之二分法专题-852. 山脉数组的峰顶索引(Peak Index in a Mountain Array) 我们把符合下列属性的数组 A 称作山脉: A.length >= 3 ...
- Leetcode724:寻找数组的中心索引(java、python3)
寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相 ...
- LeetCode刷题--26.删除排序数组中的重复项(简单)
题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成. 示例 ...
- 力扣(LeetCode)寻找数组的中心索引 个人题解
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和. 如果数组不存在中心索引,那么我 ...
随机推荐
- Python Ethical Hacking - ARP Spoofing
Typical Network ARP Spoofing Why ARP Spoofing is possible: 1. Clients accept responses even if they ...
- P1290 欧几里德的游戏(洛谷)
欧几里德的两个后代 Stan 和 Ollie 正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数 M 和 N,从 Stan 开始,从其中较大的一个数,减去较小的数的正整数倍,当然, ...
- MySQL数据库的安装方法
- 软件测试必备技能,带你学习jmeter!
一:jmeter用户变量设置: 1.在线程组鼠标右击--添加--配置元件-用户定义的变量, 2.根据业务需求自定义变量的名称,添加需要的变量和对应的值 3.在脚本对应位置添加参数 二:文件参数化: 两 ...
- python 模型的释义
CharField #字符串字段, 用于较短的字符串. #CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数. Integer ...
- IntelliJ IDEA:文件的路径本该是”\“,却变成了”¥“
修改字体导致的, 有些字体中是用¥替换掉\的,所以,修改到合适的字体就好了
- 黎曼函数ζ(2n)的几种求法
\(\zeta (2n)\)的几种求法 目录 $\zeta (2n)$的几种求法 结论 欧拉的证明 进一步探索,$\zeta$ 函数.余切.伯努利数的关系 傅立叶分析证明 留数法证明 参考资料 结论 ...
- Java基础之java8新特性(1)Lambda
一.接口的默认方法.static方法.default方法. 1.接口的默认方法 在Java8之前,Java中接口里面的默认方法都是public abstract 修饰的抽象方法,抽象方法并没有方法实体 ...
- 今天完成了deviceman的程序,压缩成deivceman.rar
目录在d:\android_projects\deviceman 压成了deviceman.rar 发送到了yzx3233@sina.com
- makefile for Linux纯小白版
某大佬曾说过: 不会makefile,不要说你会linux,因为makefile是合格程序员的必经之路 首先你要有个vi或者emacs 之类的编辑器 编写几个程序 test1.c #include&l ...