3102.力扣每日一题7/9 Java(TreeMap)

  • 博客主页:音符犹如代码
  • 系列专栏:算法练习
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

 

 

目录

TreeMap详解

解题思路

解题方法

时间复杂度

空间复杂度

Code 


TreeMap 详解

TreeMap 是 Java 中的一种数据结构,属于 Map 接口的实现类之一。

主要特点:

  1. 有序性TreeMap 中的键是按照自然顺序(对于实现了 Comparable 接口的键)或者自定义的比较器所定义的顺序进行存储和排序的。这使得遍历 TreeMap 时能按照特定的顺序获取键值对。
  2. 底层结构:其底层基于红黑树实现,红黑树是一种自平衡的二叉搜索树,保证了插入、删除和查找操作的平均时间复杂度为 ,其中 n 是键的数量。
  3. 键的要求:键必须是可比较的。如果键的类型没有实现 Comparable 接口,那么在创建 TreeMap 时必须提供一个自定义的比较器。

常见操作和方法:

  1. put(K key, V value):向 TreeMap 中添加键值对。
  2. get(Object key):根据给定的键获取对应的值。
  3. containsKey(Object key):检查 TreeMap 是否包含指定的键。
  4. firstKey():返回 TreeMap 中的第一个键。
  5. lastKey():返回 TreeMap 中的最后一个键。
  6. lowerKey(K key):返回小于指定键的最大键。
  7. higherKey(K key):返回大于指定键的最小键。

应用场景:

  1. 当需要按照键的特定顺序进行存储和访问时,例如需要对键进行有序遍历。
  2. 当需要快速查找特定范围内的键值对时,利用其有序性和相关的方法(如 subMap )。

总的来说,TreeMap 提供了有序存储和操作键值对的功能,适用于对数据顺序有要求的场景。但在某些情况下,如果不关心顺序,使用 HashMap 可能在性能上更有优势,因为其操作的平均时间复杂度更低。

解题思路

首先,使用两个 TreeMap(xs 和 ys)分别对所有点的 x + y 和 y - x 的值进行计数。
然后通过遍历每个点,模拟移除该点后更新 TreeMap 中的计数。
计算更新后的 TreeMap 中键的最大值和最小值的差值(dx 和 dy),并与当前的最小最大距离 ans 进行比较和更新。

解题方法

  1. 初始化阶段:

    • 创建两个 TreeMap 对象 xs 和 ys
    • 遍历输入的点数组 points ,对于每个点 p ,计算 x = p[0] + p[1] 和 y = p[1] - p[0] 。
    • 使用 merge 方法将 x 和 y 及其出现次数累加到对应的 TreeMap 中。如果 x 或 y 已经存在,就将其计数加 1;如果不存在,就初始化为 1。
  2. 核心处理阶段:

    • 初始化最小最大距离 ans 为 Integer.MAX_VALUE 。
    • 再次遍历点数组 points 。
    • 对于每个点,重新计算其对应的 x 和 y 。
    • 检查 xs 中 x 的计数:
      • 如果计数为 1 ,则从 xs 中移除 x 。
      • 如果计数大于 1 ,则将其计数减 1 。
    • 对 ys 中 y 进行类似的处理。
    • 计算 xs 中最大键值和最小键值的差值 dx ,以及 ys 中最大键值和最小键值的差值 dy 。
    • 取 dx 和 dy 中的最大值,与当前的 ans 比较并更新 ans 为较小值。
    • 最后,如果 x 不在 xs 中,就将其添加并初始计数为 1 ;否则将其计数加 1 。对 y 在 ys 中的处理也是类似的。
  3. 最终返回 ans ,即恰好移除一个点后任意两点之间最大距离可能的最小值。

时间复杂度

  • 初始化 TreeMap 的时间复杂度为O(n) ,其中 n 是点的数量。
  • 对每个点进行处理的时间复杂度为O(n log n) ,因为涉及到对 TreeMap 的操作。
  • 总的时间复杂度为 O(n²log n)

空间复杂度

使用了两个 TreeMap 来存储点的相关信息,空间复杂度为 O(n)

Code

import java.util.TreeMap;class Solution {public int minimumDistance(int[][] points) {TreeMap<Integer, Integer> xs = new TreeMap<>();TreeMap<Integer, Integer> ys = new TreeMap<>();for (int[] p : points) {int x = p[0] + p[1];int y = p[1] - p[0];xs.merge(x, 1, Integer::sum);ys.merge(y, 1, Integer::sum);}int ans = Integer.MAX_VALUE;for (int[] p : points) {int x = p[0] + p[1];int y = p[1] - p[0];if (xs.get(x) == 1) {xs.remove(x);} else {xs.merge(x, -1, Integer::sum);}if (ys.get(y) == 1) {ys.remove(y);} else {ys.merge(y, -1, Integer::sum);}int dx = xs.lastKey() - xs.firstKey();int dy = ys.lastKey() - ys.firstKey();ans = Math.min(ans, Math.max(dx, dy));if (!xs.containsKey(x)) {xs.put(x, 1);} else {xs.merge(x, 1, Integer::sum);}if (!ys.containsKey(y)) {ys.put(y, 1);} else {ys.merge(y, 1, Integer::sum);}}return ans;}
}

穷不失义,达不离道。——孔丘《论语》

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

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

相关文章

【Python】 已解决:ModuleNotFoundError: No module named…

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;ModuleNotFoundError: No module named… 一、分析问题背景 在使用Python进行开发时&#xff0c;有时会遇到“ModuleNotFoundError: No module named…”这样的…

android gradle开发基础

Android Gradle开发基础涉及多个方面&#xff0c;包括Gradle的基本概念、环境配置、构建脚本的编写、任务与插件的使用等。以下是对这些方面的详细介绍&#xff1a; 一、Gradle基础 1. Gradle简介 Gradle是一个开源的构建自动化系统&#xff0c;专注于灵活性和性能。它支持多…

洞察与理解:自闭症儿童的典型行为特征解析

作为星贝育园自闭症儿童康复中心的一名专业教师&#xff0c;我深知理解自闭症儿童的行为特征对于早期识别、干预和提供恰当支持至关重要。自闭症&#xff0c;或称孤独症谱系障碍&#xff08;Autism Spectrum Disorder, ASD&#xff09;&#xff0c;是一组影响个体社交互动、沟通…

创新设计策略:提升大屏幕可视化设计效果的关键方法

随着科技的不断发展和数据量的快速增长&#xff0c;数据可视化大屏在各个行业中的应用越来越广泛&#xff0c;可以帮助人们更好地理解和分析数据&#xff0c;可视化大屏设计也因此成了众多企业的需求。但很多设计师对可视化大屏设计并不了解&#xff0c;也不知道如何制作可视化…

谁说forEach不支持异步代码,只是你拿不到异步结果而已

在前面探讨 forEach 中异步请求后端接口时&#xff0c;很多人都知道 forEach 中 async/await 实际是无效的&#xff0c;很多文章也说&#xff1a;forEach 不支持异步&#xff0c;forEach 只能同步运行代码&#xff0c;forEach 会忽略 await 直接进行下一次循环… 当时我的理解…

dify/api/models/tool.py文件中的数据表

源码位置&#xff1a;dify/api/models/tool.py ToolProvider 表结构 字段英文名数据类型字段中文名字备注idStringUUIDIDUUID生成tenant_idStringUUID租户ID非空tool_nameString工具名称非空encrypted_credentialsText加密凭证可为空is_enabledBoolean是否启用默认值为 false…

[GICv3] 1.引言Introduction

基本概念 通用中断控制器 (GIC) 从外设获取中断&#xff0c;确定它们的优先级&#xff0c;然后将它们传送到适当的处理器内核。 下图了为一个 GIC 从 n 个不同的外设获取中断&#xff0c;并将它们分配给两个不同的处理器。 ​​ GCI(Generic Interrupt Controller)&#xff0c…

Caused by: java.lang.NoSuchMethodError: com.squareup.javapoet.MethodSpec

导入第三方module运行项目报&#xff1a; Caused by: java.lang.NoSuchMethodError: com.squareup.javapoet.MethodSpec$Builder.addComment(Ljava/lang/String;[Ljava/lang/Object;)Lcom/squareup/javapoet/MethodSpec$Builder; Caused by: java.lang.RuntimeException: Cann…

IPython的交互式命令行:交互式命令行界面

IPython的交互式命令行&#xff1a;交互式命令行界面 介绍 IPython是一款功能强大的交互式命令行工具&#xff0c;它极大地增强了Python编程的体验。通过提供即时反馈和动态探索功能&#xff0c;IPython帮助初学者更快速、更直观地掌握Python编程技能。本指南将详细介绍IPyth…

AI Agent 的发展现状、行业结构与趋势分析

Agent 来自一种哲学概念&#xff0c;是个很古老的哲学术语&#xff0c;从哲学意义上讲&#xff0c;“代理”的概念涉及实体的自主性&#xff0c;具有行使意志、做出选择和采取行动的能力&#xff0c;而不是被动地对外部刺激做出反应。后来人们将这一概念引入计算机科学领域&…

ApiFox或postman怎么用params类型传输json或集合+json的String类型

你是否碰见过这样的接口? post请求然后传输的参数都要和查询时一样以param形式传参数,那String什么的都好说,传就直接进后台了,那json呢,集合呢,是不是直接给你返400呢. 1.传json如何处理 那我们看看怎么实现,如果你要传json数据,那需要将特殊字符转义,也叫url转码,否则传不…

【HarmonyOS】关于官方推荐的组件级路由Navigation的心得体会

前言 最近因为之前的630版本有点忙&#xff0c;导致断更了几天&#xff0c;现在再补上。换换脑子。 目前内测系统的华为应用市场&#xff0c;各种顶级APP陆续都放出来beta版本了&#xff0c;大体上都完成了主流程的开发。欣欣向荣的气息。 学习思路 关于学习HarmonyOS的问题…

热点解读 | 小红书「县城生活」趋势前瞻

“县城婆罗门”、“月薪两万不如县城贵妇”、“北漂打工人回县城被穷笑”……继中产之后&#xff0c;县城成为又一个全网热议的焦点。 县城叙事重返舆论场&#xff0c;本期千瓜将进一步解构「县城」语境下的个体表现&#xff0c;帮助品牌沉淀用户心智&#xff0c;塑造新时代竞争…

​​​防御第一次作业

1、拓扑图及实验要求&#xff1a; 2、配置&#xff1a; 配置终端及服务器IP地址&#xff1a; Pc2&#xff1a; Client1&#xff1a; Pc4&#xff1a; Client2&#xff1a; PC1&#xff1a; Server1&#xff1a; Server2&#xff1a; 防火墙基础配置&#xff1a; [fw1]int g …

maven 依赖冲突

依赖冲突 1、对于 Maven 而言&#xff0c;同一个 groupId 同一个 artifactId 下&#xff0c;只能使用一个 version。 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 --><dependency><groupId>org.apache.commons</groupId&…

力扣题解(等差数列划分)

413.等差数列划分 如果一个数列 至少有三个元素 &#xff0c;并且任意两个相邻元素之差相同&#xff0c;则称该数列为等差数列。 例如&#xff0c;[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums &#xff0c;返回数组 nums 中所有为等差数组…

KAN-Mixer每行代码解读

import torch import torch.nn.functional as F from torch import nn import math 这几行代码导入了PyTorch库,包括主要的torch模块、torch.nn.functional模块(通常用于激活函数等),torch.nn模块(用于定义神经网络组件),以及math模块(用于基本的数学运算)。device = …

手搓前端day1

断断续续的学了些前端&#xff0c;今天开始写写代码&#xff0c;就当是记录一下自己前端的成长过程 效果&#xff1a; 写了点css&#xff0c;实现了简单的前端页面的跳转 文件目录 代码如下&#xff1a; styles.css body{margin: 0;padding: 0;}header{background-color: bl…

企业级-释放锁进程

作者&#xff1a;fyupeng 技术专栏&#xff1a;☞ https://github.com/fyupeng 项目地址&#xff1a;☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 一、介绍 当由于某个业务id发生死循环一直在运行&#xff0c;那么再来一笔相同的业务id执行相同操作&…

系统服务综合作业

首先配置自动挂载 服务器的/rhce 自动挂载在客服端的/nfs/rhce 首先在服务器进行配置 dnf install nfs-utils -y [rootlocalhost ~]# vim /etc/exports [rootlocalhost ~]# firewall-cmd --permanent --add-servicenfs success [rootlocalhost ~]# firewall-cmd --permanen…