问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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)的更多相关文章

  1. [Swift]LeetCode724. 寻找数组的中心索引 | Find Pivot Index

    Given an array of integers nums, write a method that returns the "pivot" index of this arr ...

  2. Java实现 LeetCode 724 寻找数组的中心索引(暴力)

    724. 寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧 ...

  3. C#LeetCode刷题之#852-山脉数组的峰顶索引(Peak Index in a Mountain Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4003 访问. 我们把符合下列属性的数组 A 称作山脉: A.le ...

  4. 【LeetCode】724. 寻找数组的中心下标

    724. 寻找数组的中心下标 知识点:数组:前缀和: 题目描述 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的 ...

  5. LeetCode:寻找数组的中心索引【668】

    LeetCode:寻找数组的中心索引[668] 题目描述 给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和 ...

  6. Leetcode之二分法专题-852. 山脉数组的峰顶索引(Peak Index in a Mountain Array)

    Leetcode之二分法专题-852. 山脉数组的峰顶索引(Peak Index in a Mountain Array) 我们把符合下列属性的数组 A 称作山脉: A.length >= 3 ...

  7. Leetcode724:寻找数组的中心索引(java、python3)

    寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相 ...

  8. LeetCode刷题--26.删除排序数组中的重复项(简单)

    题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成. 示例 ...

  9. 力扣(LeetCode)寻找数组的中心索引 个人题解

    给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和. 如果数组不存在中心索引,那么我 ...

随机推荐

  1. C++代码规约--命名约定

    目录 通用命名规则 文件命名 类型命名 变量命名 常量命名 函数命名 宏命名 枚举命名 命名空间命名 命名规则的特例 学习自Google C++编程规约 通用命名规则 函数命名, 变量命名, 文件命名 ...

  2. linux目录结构 主流Linux发行版的目录结构

    目录 目录结构 一般教学的目录 CentOS7 openSUSE15.1 Ubuntu18.04 详细说明: /dev目录 /etc目录 /proc目录 /usr目录 /var目录 比较重要的目录 文 ...

  3. 9.CSMA_CD协议

    先听再说,边听边说 载波监听多点接入/碰撞检测CSMA/CD( carrier sense multiple access with collision detection) CD:碰撞检测(冲突检测 ...

  4. 超简单的jq图片上传

    <label class="file_img" for="file_imgs"> <input class="file_imgs&q ...

  5. nmap加快扫描速度(转载)

    实测有效 nmap -sS -Pn -p 80 -n --open --min-hostgroup 1024 --min-parallelism 10 --host-timeout 30 -T4 -v ...

  6. json互相转换

    C#的后台 json转换为对象 JavaScriptSerializer js = new JavaScriptSerializer(); 对象 resacc = js.Deserialize< ...

  7. LQB2017A02跳蚱蜢

    为什么第二题就这么难呜呜呜,这不是为难我吗!!! 可以明确的是,又是一个bfs 最少路径,找满足条件的那个层数 #include<iostream> #include<stdio.h ...

  8. Java锁_读写锁

    独占锁:是指锁一次只能被一个线程持有,ReentrantLock和Synchronized都是独占锁. 共享锁:是指锁可以被多个线程持有. 对于ReentrantReadWriteLock,其读锁是共 ...

  9. Python time altzone()方法

    描述 Python time altzone() 函数返回格林威治西部的夏令时地区的偏移秒数.高佣联盟 www.cgewang.com 如果该地区在格林威治东部会返回负值(如西欧,包括英国).对夏令时 ...

  10. PHP is_resource() 函数

    is_resource() 函数用于检测变量是否为资源类型. PHP 版本要求: PHP 4, P+-HP 5, PHP 7高佣联盟 www.cgewang.com 语法 bool is_resour ...