首页 > 其他分享 >树状数组learning Day1识海社区打卡1st

树状数组learning Day1识海社区打卡1st

时间:2024-11-09 22:19:41浏览次数:1  
标签:树状 int 线段 识海 Day1 力扣 数组 打卡 查询

鉴于上次省赛的惨烈失败教训,狠狠加训,距离下次沈阳站还有两星期,再次感谢东北大学赐予的外卡机会,你知道的,东北大学一直是我的第二户籍所在地。今天到下星期周末为止估计都会持续更新树状数组和线段树相关的笔记。

我的刷题顺序大概会按照[灵神提单](LC-Rating & Training) ->codeforces这样的步骤来,灵神提单十分适合入门一门新的算法,而且力扣看题解十分方便,强烈推荐入门使用。力扣还有一个好处就是题目不会像别的oj平台一样难以理解,不看个好几分钟都提炼不出题目意思,当然这个速度是能随着刷题数量的增多而逐渐摸清楚题目套路而缩短时间的,如果要打算法类竞赛还是得多吃些这种屎,把时间花在平时,赛场上就能获得更好的表现。

初识树状数组:树状数组是一个简化版的线段树,能完成单点查询/修改,区间查询/修改,区间修改/单点查询等操作;

优点:复杂度于线段树一样都是logN,但常熟比线段树小;

缺点:扩展性弱,线段树能解决的问题,树状数组不一定能解决。

3187. 数组中的峰值 - 力扣(LeetCode)

这道例题非常经典,给定一个数组,对数组进行区间查询和单点修改。思路大概就是先写一个数组用于储存前缀数组的峰值最多值,然后对于单点修改写一个更新函数,用于更新替换后前缀数组最多的值,写一个查询直接查询区间的峰值。

由于我也初学写这个就不展示简陋的代码了,建议直接看灵神的。

3187. 数组中的峰值 - 力扣(LeetCode)值得关注的是灵神在写前缀和函数和更新函数中用到了二进制的知识,如果前缀和一个个查找实在太慢了所以

 void update(int i, int val) {
        for (; i < f.size(); i += i & -i) {
            f[i] += val;
        }
    }   //直接跳到下一个2的幂次方,比如3跳4,4跳8如此类推
 int pre(int i) {
        int res = 0;
        for (; i > 0; i &= i - 1) {
            res += f[i];
        }
        return res;
    }//也是一种跳跃查询,可以自己模拟一下



作者:灵茶山艾府
链接:https://leetcode.cn/problems/peaks-in-array/solutions/2812394/shu-zhuang-shu-zu-pythonjavacgo-by-endle-tj0w/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:树状,int,线段,识海,Day1,力扣,数组,打卡,查询
From: https://www.cnblogs.com/coloury/p/18537401

相关文章

  • 天天学编程Day11
    每日一道编程题104.二叉树的最大深度classSolution{public:intans=0;intmaxDepth(TreeNode*root){dfs(root,1);returnans;}//使用深度优先遍历遍历二叉树记录路径长度不断更新全局变量最长长度//遍历完成后ans即为......
  • day1_背景知识
    1.提高代码能力:类名使用大驼峰命名法标识符见名知意2.单占位符的格式化输出age=1str1='小李今年%d岁了'%age#占位符是字符串的特性,与print()函数无关print(str1)3.多占位符的格式化输出name='张强'age=1gender='女'print('学员的名字是%s,年龄......
  • 泷羽sec-星光不负a-学习打卡-信息收集(3)
    天眼查https://www.tianyancha.com/(有经济条件开会员)企查查https://www.qcc.com/(可查询相关人电话和公开招标文件信息)谷歌搜索语法1.intext查找网页中含有某个关键字的网站例如:intext:登录后台2.intitle查找标题中含有某个关键词的网页例如:intitle:登录后台3......
  • python+flask计算机毕业设计好骑行打卡园app系统(程序+开题+论文)
    文件加密系统的设计与实现tp835本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容好骑行打卡园app系统毕业设计相关内容说明一、选题背景随着骑行运动在全球范围内的日益流行,与之相关的数字化服务......
  • 力扣21 打卡17 设计相邻元素求和服务
    思路:该方案通过构建一个字典,将每个元素值映射到其在二维数组中的坐标位置,以便快速查找。adjacentSum方法根据指定元素的坐标,计算其上下左右相邻元素之和;diagonalSum方法则计算该元素的四个对角线相邻元素之和。每个方法通过判断相邻坐标是否在数组边界内,确保不越界访问。......
  • 第一天打卡,udp协议
    今天学了udp协议基础,udp协议是一种无连接的网络协议,提供一种简单的方式来输送数据。发送:要用到的方法封装在InetAddress类中,其中DatagramSocket对象ds相当于快递员身份,不传递参数值的话会随机生成端口,进行输送快递(数据),快递的身份由DatagrampPacket对象充当,把东西打包。其中的......
  • 天天学编程Day10
    今日两道编程题LCR140. 训练计划IIclassSolution{public:ListNode*trainingPlan(ListNode*head,intcnt){//我选择使用双指针方法定义两个位置在头结点的指针//先让快指针先走cnt个位置然后让两个指针同时走//当快指针走到空节......
  • 嵌入式课程day10-C语言数组
    目录七、数组7.1数组是什么?7.2数组的使用7.3定义数组7.4数组初始化7.5冒泡排序7.6二分法查找七、数组7.1数组是什么?存储多个同种类型的数据 ,方便数据处理7.2数组的使用先定义再使用7.3定义数组存储多少数据 数据的数据类型 数组名元素:数组中数据可以统......
  • Day14买卖股票的最佳时机
    给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润......
  • 力扣21 打卡16 判断矩形的两个角落是否可达
    思路:首先,检查矩形的起点和终点是否在任何一个圆的范围内,如果是则不存在合法路径。接着,判断每个圆是否与矩形的左上角边界或右下角边界相交。对于与左上边界相交的圆,使用深度优先搜索(DFS),查找是否存在一组相连的圆,最终能连接到右下边界。若找到这样的路径,则矩形被封锁,返回Fa......