lc307.区域和检索 - 数组可修改

暴力解法

创建方法,通过switch-case判断所需要调用的方法。

public class RegionsAndSertches {public static void main(String[] args) {String[] str = new String[]{"NumArray", "sumRange", "update", "sumRange"};int[][] arr = new int[][]{{1, 3, 5}, {0, 2}, {1, 2}, {0, 2}};invoke(str, arr);}public static void invoke(String[] str, int[][] arr) {//str表示上面一行字符串输入,arr表示下面一行二维数组输入NumArray numArray = new NumArray(arr[0]);//第一个必须为NumArray,一定要先创建对象,否则无法调用方法System.out.println("null");//根据题意返回nullfor (int i = 1; i < str.length; i++) {//跳过第一个,索引从1开始//根据输入的字符串判断需要执行哪个方法switch (str[i]) {case "sumRange"://调用sumRange方法,arr[i][0]为left,arr[i][1]为right,方法返回累加和System.out.println(numArray.sumRange(arr[i][0], arr[i][1]));break;case "update"://方法不返回,根据题意输出nullnumArray.update(arr[i][0], arr[i][1]);System.out.println("null");break;default:System.out.println("请输入sumRange或update以执行方法");}}}}class NumArray {public int[] nums;public NumArray(int[] nums) {//构造器this.nums = nums;//创建了哪个对象,this就表示哪个对象}public void update(int index, int val) {this.nums[index] = val;//题目表示nums[index],不考虑是否加减一}public int sumRange(int left, int right) {int sum = 0;//表示累加和for (int i = left; i <= right; i++) {//left和right都为索引,不用考虑是否加减一sum += this.nums[i];}return sum;}
}

分块处理

其中 n / size 向上取整

 

构造函数
  • 计算块大小size=根号n

  • 初始化sum块数组
update函数
  • 计算新的块数组sum
  • 更新nums数组
sumRange函数

class NumArray {private int[] sum; // sum[i] 表示第 i 个块的元素和private int size; // 块的大小private int[] nums;public NumArray(int[] nums) {this.nums = nums;int n = nums.length;size = (int) Math.sqrt(n);//size的值取根号n,此时的时间复杂度最优sum = new int[n / size + 1];//向上取整for (int i = 0; i < n; i++) {sum[i / size] += nums[i];}}public void update(int index, int val) {// index/size是sum数组的索引sum[index / size] = sum[index / size] - nums[index] + val;//更新sum数组nums[index] = val;//更新nums数组}public int sumRange(int left, int right) {int b1 = left / size, i1 = left % size, b2 = right / size, i2 = right % size;//因为是从b1这块数据内从0开始的索引,需要调整//left - left / size - 1, left=0会越界算出来=-1//避免出现长度为1的数组,一个数被加两次的情况,虽然此时sum3=0,但是sum1和sum2都会加一次if (b1 == b2) { // 区间 [left, right] 在同一块中int sum = 0;for (int j = i1; j <= i2; j++) {sum += nums[b1 * size + j];}return sum;}int sum1 = 0;for (int j = i1; j < size; j++) {//包括leftsum1 += nums[b1 * size + j];}int sum2 = 0;for (int j = 0; j <= i2; j++) {//包括rightsum2 += nums[b2 * size + j];}int sum3 = 0;for (int j = b1 + 1; j < b2; j++) {//b1和b2相等的时候sum3=0,从索引为b1+1的块到b2-1的块之和sum3 += sum[j];}return sum1 + sum2 + sum3;}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/141412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于RK3568的跑步机方案

I 方案简介 一、跑步机的来历 跑步机是家庭及健身房常备的健身器材&#xff0c;而且是当今家庭健身器材中最简单的一种&#xff0c;是家庭健身器的最佳选择。1965年北欧芬兰唐特力诞生了全球第一台家用的跑步机&#xff0c;设计师根据传速带的原理改变而成。 二、…

人工智能基础_机器学习026_L1正则化_套索回归权重衰减梯度下降公式_原理解读---人工智能工作笔记0066

然后我们继续来看套索回归,也就是线性回归,加上了一个L1正则化对吧,然后我们看这里 L1正则化的公式是第二个,然后第一个是原来的线性回归,然后 最后一行紫色的,是J= J0+L1 对吧,其实就是上面两个公式加起来 然后我们再去看绿色的 第一行,其实就是原来线性回归的梯度下降公式…

Vatee万腾科技决策力的引领创新:Vatee数字化视野的崭新天地

在数字时代的激烈竞争中&#xff0c;Vatee万腾以其科技决策力的引领&#xff0c;开创了数字化视野的崭新天地。这并不仅仅是一场技术的飞跃&#xff0c;更是一次对未来的深刻洞察和引领创新的勇敢实践。 Vatee万腾的科技决策力不仅仅停留在数据分析和算法的运用&#xff0c;更是…

BlendTree动画混合算法详解

【混合本质】 如果了解骨骼动画就知道&#xff0c;某一时刻角色的Pose是通过两个邻近关键帧依次对所有骨骼插值而来&#xff0c;换句话说就是由两个关键帧混合而来。 那么可不可以由多个关键帧混合而来呢&#xff1f;当然可以。 更多的关键帧可以来自不同的动画片段&#xf…

nacos适配达梦数据库

一、下载源码 源码我直接下载gitee上nacos2.2.3的&#xff0c;具体链接&#xff1a;https://gitee.com/mirrors/Nacos/tree/2.2.3&#xff0c;具体如下图&#xff1a; 二、集成达梦数据库驱动 解压源码包&#xff0c;用idea打开源码&#xff0c;等idea和maven编译完成&#xff…

小程序中如何设置多门店/多人/多商品价格库存等复杂场景设置

有些商家希望打造小程序平台&#xff0c;在这个平台上有多个商家入驻&#xff0c;他们分别售卖自己的商品。而有些商家有多个连锁店&#xff0c;连锁店的商品都是一样的&#xff0c;但不同的连锁店有不同的库存和价格。这些业务在采云小程序中是怎么支持的呢&#xff1f;下面具…

使用 `open-uri.with_proxy` 方法打开网页

Ruby 爬虫程序如下&#xff1a; require open-uri require nokogiri# 定义代理信息 proxy_host jshk.com.cn# 定义要爬取的网页 URL url http://www.example.com# 使用代理信息打开网页 open-uri.with_proxy(proxy_host, proxy_port) do |proxy|# 使用 Nokogiri 库解析网页内…

web前端开发第3次Dreamweave课堂练习/html练习代码《网页设计语言基础练习案例》

目标图片&#xff1a; 文字素材&#xff1a; 网页设计语言基础练习案例 ——几个从语义上和文字相关的标签 * h标签&#xff08;h1~h6&#xff09;&#xff1a;用来定义网页的标题&#xff0c;成对出现。 * p标签&#xff1a;用来设置网页的段落&#xff0c;成对出现。 * b…

微信小程序授权登陆 getUserProfile

目录 前言 步骤&#xff1a; 示例代码: 获取用户信息的接口变化历史: 注意事项&#xff1a; 前言 在微信小程序中&#xff0c;你可以使用 getUserProfile 接口来获取用户的个人信息&#xff0c;并进行授权登录。以下是使用 getUserProfile 的步骤&#xff1a; 小程序发了…

file2Udp增量日志转出Udp简介

https://gitee.com/tianjingle/file2udp 很多时候服务产生的日志需要进行汇总&#xff0c;这种统一日志处理的方式有elb&#xff0c;而且很多日志组件也支持日志转出的能力。但是从广义上来说是定制化的&#xff0c;我们需要一个小工具实现tail -f的能力&#xff0c;将增量日志…

U-Mail邮件中继有效解决海外邮件发送不畅难题

相信不少企业都经历过类似的问题&#xff0c;在跟国外客户发送电子邮件的过程中&#xff0c;经常会遇到邮件发不过去、邮件隔了很久对方才收到&#xff0c;或者是邮件退信等情况出现。对此&#xff0c;U-Mail技术专家李工解释到&#xff0c;导致海外通邮不畅主要有以下三个原因…

ADFS 高可用配置 + NLB配置(Windows网络负载均衡)

ADFS 高可用配置 NLB配置&#xff08;Windows网络负载均衡&#xff09; ADFS安装配置NLB配置节点 TEST-ADFS-01 网络负载平衡配置节点 TEST-ADFS-02 网络负载平衡修改CRM配置 ADFS实现高可用负载均衡有两种&#xff0c;主要是在数据库的选择方式&#xff1a; windows自带的内…

2023.11.11通过html内置“required-star“添加一个红色的星号来表示必填项

2023.11.11通过html内置"required-star"添加一个红色的星号来表示必填项 在HTML中&#xff0c;可以使用标签来为元素添加说明。同时可以通过添加一个红色的星号来表示必填项。 <!DOCTYPE html> <html lang"en"> <head><meta charse…

Python中的数据增强技术

使用imgaug快速观察Python中的数据增强技术 在本文中&#xff0c;我们将使用imgaug库来探索Python中不同的数据增强技术 什么是图像增强 图像增强是一种强大的技术&#xff0c;用于在现有图像中人为地创建变化以扩展图像数据集。这是通过应用不同的变换技术来实现的&#xf…

EXTI (2)

增强版实验简介 EXTI5和EXTI9共享一个中断源 下面的类似 EXTI0到4各自拥有一个中断源 改变引脚 PA0和PA1改变为PA5 和PA6 EXTI的重映射 之前是把PA0映射到EXTI0 PA1映射到EXTI1上 现在是要把PA5和PA6分别映射到EXTI5和6上 EXTI进行初始化 NVIC初始化 编写中断函数 因为EXTI…

如何在电脑和手机设备上编辑只读 PDF

我们大多数人更喜欢以 PDF 格式共享和查看文件&#xff0c;因为它更专业、更便携。但是&#xff0c;通常情况下您被拒绝访问除查看之外的内容编辑、复制或评论。如果您希望更好地控制您的 PDF 或更灵活地编辑它&#xff0c;请弄清楚为什么您的 PDF 是只读的&#xff0c;然后使用…

无监督学习的集成方法:相似性矩阵的聚类

在机器学习中&#xff0c;术语Ensemble指的是并行组合多个模型&#xff0c;这个想法是利用群体的智慧&#xff0c;在给出的最终答案上形成更好的共识。 这种类型的方法已经在监督学习领域得到了广泛的研究和应用&#xff0c;特别是在分类问题上&#xff0c;像RandomForest这样…

解决npm报错Error: error:0308010C:digital envelope routines::unsupported

解决npm报错Error: error:0308010C:digital envelope routines::unsupported。 解决办法&#xff1b;终端执行以下命令&#xff08;windows&#xff09;&#xff1a; set NODE_OPTIONS--openssl-legacy-provider然后再执行 npm命令成功&#xff1a;

Spark3.0中的AOE、DPP和Hint增强

1 Spark3.0 AQE Spark 在 3.0 版本推出了 AQE&#xff08;Adaptive Query Execution&#xff09;&#xff0c;即自适应查询执行。AQE 是 Spark SQL 的一种动态优化机制&#xff0c;在运行时&#xff0c;每当 Shuffle Map 阶段执行完毕&#xff0c;AQE 都会结合这个阶段的统计信…

微信小程序广告banner、滚动屏怎么做?

使用滑块视图容器swiper和swiper-item可以制作滚动屏&#xff0c;代码如下&#xff1a; wxml: <swiper indicator-dots indicator-color"rgba(255,255,255,0.5)" indicator-active-color"white" autoplay interval"3000"><swiper-ite…