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.(向前冲)


相关文章
|
4天前
|
数据采集 存储 自然语言处理
elasticsearch 跨索引联合多条件查询
elasticsearch 跨索引联合多条件查询
|
4天前
|
存储 分布式计算 监控
如何使用索引加速查询?
【5月更文挑战第8天】如何使用索引加速查询?
21 1
|
4天前
|
DataWorks 安全 数据库
如果在DataWorks的数据地图中找不到表,并且在安全中心中选择不了项目空间
【1月更文挑战第2篇】如果在DataWorks的数据地图中找不到表,并且在安全中心中选择不了项目空间
36 0
|
SQL Cloud Native 算法
PolarDB-X 1.0-用户指南-数据表管理-调整拆分键
您可以在PolarDB-X控制台上管理数据表,调整数据表的拆分键。
170 0
PolarDB-X 1.0-用户指南-数据表管理-调整拆分键
|
SQL 存储 JSON
Spark访问多元索引-细则剖析
## 背景 表格存储可以为Spark提供**KV查询(主表,全局二级索引表)**、**多元索引查询**两套数据访问方式,以支持海量结构化数据快速读写和丰富的SQL查询分析能力。其分布式存储的特点和强大的索引引擎能够支持PB级存储、千万TPS以及毫秒级延迟的服务能力。 KV访问方式指的是主表和全局二级索引访问方式,其中主表指的是Tablestore的源数据主表,全局二级索引和多元索引的介绍见
472 0
Spark访问多元索引-细则剖析
|
NoSQL 分布式数据库 数据库
2.0解析系列 | 一文详解 OceanBase 2.0 的“全局索引”功能
OB君:本文是 “OceanBase 2.0 技术解析系列” 的第九篇文章。今天我们来聊聊2.0的全局索引功能。本文将带你简单回顾全局索引的概念,并详细介绍OceanBase 2.0版本如何实现全局索引的功能。更多精彩关注OceanBase公众号持续订阅本系列内容!
|
存储 物联网 数据库
TableStore发布多元索引功能,打造统一的在线数据平台
TableStore发布多元索引功能,提供多字段ad-hoc查询、模糊查询、全文检索、排序、范围查询、嵌套查询、空间查询等功能,打造统一的在线数据平台
7905 0
|
关系型数据库 测试技术 数据库
HTAP数据库 PostgreSQL 场景与性能测试之 47 - (OLTP) 空间应用 - 高并发空间位置更新、多属性KNN搜索并测(含空间索引)末端配送类项目
标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。
2343 0
|
关系型数据库 测试技术 PostgreSQL
PostgreSQL ADHoc(任意字段组合)查询 与 字典化 (rum索引加速) - 实践与方案1
标签 PostgreSQL , rum , adhoc , index scan , bitmap scan , gin 背景 业务背景 某系统数据量: 20亿行左右,64个字段,原始数据多为字符串类型。
3197 0