当前位置: 首页 > news >正文

算法模板题记录

文章目录

  • 前言
  • 一、线段树
    • 模板题
    • 代码实现

前言

用于记录在算法学习过程中遇到典型的题目,方便日后个人查看。

一、线段树

模板题

LeetCode 307

代码实现

 class NumArray {private int[] segmentTree ; private int n ; public NumArray(int[] nums) {n = nums.length ; segmentTree = new int[4*n] ;  // 线段 区间值// 构建线段树build(1, 1, n, nums);}// 构建 线段树 private void build(int node, int s ,int e ,int[] nums) { // node 代表线段树的当前节点// [s,e] 代表当前线段树 维护的区间// nums 记录向线段树中要加入的值if(s == e) {segmentTree[node] = nums[s-1] ; return ; }int mid =s + (e-s) / 2 ;// 维护左子树build(2*node, s ,mid , nums);// 维护右子树build(2*node+1, mid+1 ,e , nums);// 维护当前节点 等于 左右子树的区间值之和segmentTree[node] = segmentTree[2*node]+segmentTree[2*node+1] ; }// 更新线段树 某个节点的值public void change(int node, int s, int e, int index, int val) {if(s == e) {segmentTree[node] = val;  return ; }int mid =s + (e-s) / 2 ;// 根据index 进行查找,查找index 所在的区间if(index<=mid) { // 查找 左子树change(node*2, s, mid, index, val) ; }else { // 查找 又子树change(node*2+1, mid+1, e, index, val) ; }segmentTree[node] = segmentTree[2*node]+segmentTree[2*node+1] ; }// 根据范围查询区间值private int range(int node ,int s, int e ,int L, int R) {// 如果要查询的范围 包含当前节点所维护的范围,直接返回当前范围的值if(L<=s && R>=e) {return segmentTree[node] ; }int count = 0; // 依次遍历左右子树 来获得最终的子段和int mid = s+(e-s)/2; if(L<=mid) {count += range(2*node, s, mid, L, R); }if(R>mid) {count+= range(2*node+1, mid+1, e, L, R) ; }return count ; }public void update(int index, int val) {change(1, 1, n, index+1, val);}public int sumRange(int left, int right) {return range(1, 1, n, left+1, right+1) ; }
}

相关文章:

  • Python万圣节礼物
  • LeetCode 2656. K 个元素的最大和:一次遍历(附Python一行版代码)
  • 【Pytorch和深度学习】栏目导读
  • Oneid方案
  • 《深入浅出.NET框架设计与实现》阅读笔记(四)
  • SOLIDWORKS Flow Simulation阀门内流体仿真
  • 基于乌鸦算法优化概率神经网络PNN的分类预测 - 附代码
  • 软件测试不是所有人都适合的
  • 腾讯云标准型SA4服务器AMD处理器性能测评
  • vue中实现图片懒加载的几种方法
  • 扭矩传感器信号模拟地、数据地与电源地
  • Docker 中的端口
  • 批量重命名软件推荐 A Better Finder Rename 12最新 for mac
  • Mysql开启binlog 和 打开gtid_mode
  • 【蓝桥杯软件赛 零基础备赛20周】第3周——填空题
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 230. Kth Smallest Element in a BST
  • golang 发送GET和POST示例
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java的Interrupt与线程中断
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • PHP 7 修改了什么呢 -- 2
  • Redis的resp协议
  • spring boot下thymeleaf全局静态变量配置
  • underscore源码剖析之整体架构
  • win10下安装mysql5.7
  • 百度小程序遇到的问题
  • 不上全站https的网站你们就等着被恶心死吧
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • ionic异常记录
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​Java并发新构件之Exchanger
  • #WEB前端(HTML属性)
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (26)4.7 字符函数和字符串函数
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)为什么要选择C++
  • (转)创业的注意事项
  • (转)甲方乙方——赵民谈找工作
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Micro Framework 4.2 beta 源码探析
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net解析传过来的xml_DOM4J解析XML文件
  • @angular/cli项目构建--http(2)
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @staticmethod和@classmethod的作用与区别
  • [100天算法】-不同路径 III(day 73)