Day6 求中心索引

简介: Day6 求中心索引

算法目录


基本介绍


今天我们在leetcode上看到一个题

20210125170453815.png



给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。

我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。


如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。


示例


示例 1:


输入: nums = [1, 7, 3, 6, 5, 6] 输出: 3 解释: 索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。同时, 3 也是第一个符合要求的中心索引。


示例 2:


输入: nums = [1, 2, 3] 输出: -1 解释: 数组中不存在满足此条件的中心索引。


代码


现在就开始补充以下代码


class Solution:
  def pivotIndex(self, nums: List[int]) -> int:


高效解

class Solution:
    def pivotIndex(self, nums: List[int]) -> int:
        total = sum(nums)
        left = 0
        for i in range(len(nums)):
            if left == total - left - nums[i]:
                return i
            left += num[i]
        return -1

这种解法是很高效的。

这其实是一个前缀和的应用,前缀和可以简单看作数列前n项的和,在DP和树路径求和也有应用,同理还有后缀和,前缀积,后缀积。


不高效解

def center_index(nums):
    for i in range(len(nums)):
        if sum(nums[:i]) == sum(nums[i+1:]):
            return i
    return -1

比第一种解法,这种求解方法不高效。

因为每迭代一次,都要 sum 求和两次,而 sum 求和本质也是一个循环,所以相当于嵌套for 循环。

我们需要思考,是否有必要每次都要求和,显然是不必要的。

如果存在中心索引,则一定满足:中心索引左侧和 * 2 + nums[i] == sum(nums)

而sum(nums) 一定是个定值, 中心索引的左侧求和可放在循环中逐渐累加得到,所以只用一层for 即可。


算法分析总结


往往我们第一下想到的解法未必是最高效的,还要多加分析,培养算法思维才行。而如果想要培养算法思维和敏锐度,就要多加练习,通常来回训练 LeetCode 题是不错的方法。

比如上一道题,前缀和可以简单看作数列前n项的和,在DP和树路径求和也有应用,同理还有后缀和,前缀积,后缀积。

加油,只要我们坚持下去。


每日一句

Just do it.(向前冲)


相关文章
|
8月前
|
数据采集 存储 自然语言处理
elasticsearch 跨索引联合多条件查询
elasticsearch 跨索引联合多条件查询
|
5月前
|
存储 运维 搜索推荐
运维开发.索引引擎ElasticSearch.倒序索引的概念
运维开发.索引引擎ElasticSearch.倒序索引的概念
56 1
|
7月前
|
数据库 索引
Elasticsearch索引别名:管理与优化数据访问
Elasticsearch索引别名:管理与优化数据访问
112 2
|
8月前
|
运维 安全 API
Elasticsearch 悬挂索引解析与管理指南
Elasticsearch 悬挂索引解析与管理指南
112 7
|
SQL 关系型数据库 MySQL
一个索引创建错误引发的思考
同事反馈说某个 MySQL 数据库创建索引提示错误,模拟报错如下: CREATE INDEX t_reg_code_idx USING BTREE ON t(reg_code) BLOB/TEXT column 'reg_code' used in key specification without a key length 从该提示可知,给 T 表的 reg_code 列创建一个 BTREE 索引,而这个 reg_code 列的字段类型是 BLOB 或 TEXT。 需要在键的说明中有长度定义,这是什么意思?
129 0
应用中心——应用中心如何使用
应用中心——应用中心如何使用自制脑图
92 0
应用中心——应用中心如何使用
|
存储 搜索推荐 索引
Elasticsearch 如何处理索引的数据比较和数据匹配?具体步骤是怎样的?
Elasticsearch 如何处理索引的数据比较和数据匹配?具体步骤是怎样的?
232 0
|
存储 索引
es对日志数据进行索引生命周期管理
es对日志数据进行索引生命周期管理
636 0