leetcode hot100_part01_哈希

news2024/9/20 18:54:07

1.两数之和

        遍历数组,map中存在target - nums[i]就返回结果,不存在就把当前元素存入map;

49.字母异位词分组

        分组,怎么分,用hashMap, key为每一组的标识,value为每一组包含的字符串(属于同一组的);那么key就有两种选择了

        key可以是某一组中某个字符串排好序的字符串x,遍历每个字符串,排序如果和x一样,加入该分组;否则就是一个新的分组

        key可以用某组字符串的特征构造新的字符串,遍历,对于串s,获取它的每个字符出现的次数,比如abbc,对应的分组的key就是a1b2c3(字母+出现次数);对于后续的某个串如果拆解后和key一样,就是一组,否则是新的一组;

128.最长连续序列

9/11

        假设数排好了序,那么会有很多的连续序列,我们对其中一个序列统计长度时,要从头开始统计,才可以在遍历过程中对每个序列只统计一次; 如果从中间开始统计效率就太低了,遍历到某个序列的不同元素时,都会对这个序列进行统计;

        还有就是,对于哈希表里的重复元素,看示例2,001的最长连续序列算2

之前的做法:

4/14/2024

        这是前两天做一半的题目了。这题给我的教训就是用哈希表的时候一定一定要考虑重复元素的问题!!!!

        这题让我想到了最长递增子序列,只是名字有点像。子序列和子数组还不一样一个连续一个不连续。自己一开始的做法是把每个元素作为key,是否被访问过作为value来存入hash表里,然后对数组元素进行遍历,访问了首先value为true,然后双指针分别标记前一个数 nums-1 和后一个数nums+1 ,分别向前和向后迭代更新,指针相减即为长度,迭代最大长度即可。

        注意boolean的布尔类型为Boolean

        一个for循环引发的错误,但是你这个方法也好慢啊。。

class Solution {
    public int longestConsecutive(int[] nums) {
        HashMap<Integer, Boolean> hash = new HashMap<>();
        int res = 0;
        for(int x : nums){
            hash.put(x, false);
        }
        for(int i = 0; i < nums.length; i++){
            // 原来的这个if条件写在了for循环的条件里
            // 这样不就只找了一次,
            if(hash.get(nums[i]) == false){
                //我说怎么慢,访问这个元素也要改为true,之前忘了
                hash.replace(nums[i], true);
                int low = 0;
                int fast = 0;
                int cur = nums[i];
                while(hash.containsKey(cur - 1)){
                    low--;
                    hash.replace(cur - 1, true);
                    cur = cur - 1;
                }
                // 重置cur;
                // 相同元素?
                cur = nums[i];
                while(hash.containsKey(cur + 1)){
                    fast++;
                    hash.replace(cur + 1, true);
                    cur = cur + 1;
                }
                int p = fast - low + 1;
                res = res > p ? res : p;
            }
            else continue;   
        }
        return res;

    }
}

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

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

相关文章

【笔记】第一节. 引言

• 轨道用钢的加工过程 • 钢轨结构及其标准 • 轨道结构特点 • 钢轨的商业化及其发展趋势 轨道用钢的加工过程 钢轨形式及其标准 钢轨的基本结构 轨头、轨腰、轨底。 钢轨的技术标准 • 铁道行业标准《TB/T2344-2003&#xff1a;43&#xff5e;75 kg/m 热轧钢轨订货技术…

腾讯云Ubuntu系统安装宝塔,配置Java环境,运行spring boot项目

致谢 本次学习宝塔部署spring boot项目&#xff0c;参考如下资料 https://www.cnblogs.com/daen/p/15997872.html 系统安装宝塔 直接用的腾讯云云服务器面板上的登录&#xff0c;你可以换成 xshell 进入宝塔官网&#xff1a; https://www.bt.cn/new/download.html 我们采…

【Android】Handler用法及原理解析

文章目录 用处基本用法用法一&#xff1a;使用sendMessage和handleMessage方法用法二&#xff1a;使用post方法 法一工作原理Handler的sendMessageMessage成员变量 MessageQueueLooper主线程自动初始化子线程手动创建**prepare**loop Handler的dispatchMessage 法二工作原理Han…

机器学习中最常见的50个问题(进阶篇)

机器学习中最常见的50个问题 进阶篇 1.解释SVM的工作原理。 SVM&#xff0c;全称支持向量机&#xff08;Support Vector Machine&#xff09;&#xff0c;是一种有监督学习算法&#xff0c;主要用于解决数据挖掘或模式识别领域中的数据分类问题。 SVM的工作原理是建立一个最…

TypeScript 扩展

扩展 ?:可选参数 可选链事实上并不是TypeScript独有的特性&#xff0c;它是ES11&#xff08;ES2020&#xff09;中增加的特性 可选链使用可选链操作符 ? 作用是当对象的属性不存在时&#xff0c;会短路&#xff0c;直接返回undefined&#xff0c;如果存在&#xff0c;那么…

小程序开发设计-小程序简介①

1.小程序与普通网页开发的区别&#xff1a; 1.运行环境不同&#xff1a; 网页运行在浏览器环境中。 小程序运行在微信环境中。 2.API不同&#xff1a; 由于运行环境不同&#xff0c;所以小程序中&#xff0c;无法调用DOM和BOM的API。但是&#xff0c;小程序中可以调用微信环境提…

摊牌了!一文教会你轻松上手豆包MarsCode 编程助手!

豆包MarsCode 编程助手是豆包旗下的 AI 编程助手&#xff0c;提供以智能代码补全为代表的 AI 功能。豆包MarsCode 编程助手支持主流的编程语言和 IDE&#xff0c;在开发过程中提供单行代码或整个函数的编写建议。此外&#xff0c;它还支持代码解释、单测生成和问题修复等功能&a…

收藏!6个PPT素材模板网站,快速做出好看的PPT

找PPT模板一定要收藏好这6个网站&#xff0c;能让你快速做出好看的PPT&#xff0c;重点十可以免费下载&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材都…

时序必读论文05|PatchTST : 时序数据Patch已成趋势【ICLR 2023】

书接上回&#xff0c;我们在之前的文章已经分析了直接把transformer应用到时间序列预测问题的不足&#xff0c;其中我们总结了4个不足&#xff1a;分别是&#xff1a; 注意力机制的计算复杂度高&#xff0c;为 O(N^2)&#xff0c;并且计算得出的权重仅有少部分有用&#xff1b;…

【TCP三次握手+四次挥手(个人理解版本)】

TCP协议介绍 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff08;它是全双工工作模式&#xff09;。以下是对它的具体介绍&#xff1a; 基本概念 定义&#xff1a;TCP是Transmission Control Protocol的缩写&#xff…

PHP无缝对接预订无忧场馆预订系统小程序源码

无缝对接&#xff0c;预订无忧 —— 场馆预订系统&#xff0c;让每一次活动都完美启航&#xff01; 一、告别繁琐流程&#xff0c;预订从未如此简单 你是否曾经为了预订一个合适的场馆而焦头烂额&#xff1f;繁琐的咨询、确认、支付流程&#xff0c;让人心力交瘁。但现在&…

如何利用Java进行快速的足球大小球及亚盘数据处理与分析

在当今信息爆炸的时代&#xff0c;大量的数据产生和积累&#xff0c;对于企业和个人来说&#xff0c;如何高效地处理和分析这些数据成为了一项重要的任务。Java作为一门强大的编程语言&#xff0c;提供了丰富的工具和库&#xff0c;可以帮助我们快速进行数据处理与分析。下面将…

vue3中实现拖拽排序(vue-draggable-next的使用)

1.安装插件 npm i vue-draggable-next 2.引入使用 <template> <vue-draggable-next v-model"list" tag"div" handle".warn-card" group"warngroup" ghost-class"ghost"class"mb10 warn-card-box" ani…

【mysql】逻辑运算符

逻辑运算符 逻辑运算符主要是为了判断表达式的真假,返回结果也是1,0,null OR 这里面或就是两个条件或的关系,比如我要department_id等于10和等于20的情况就可以使用或. SELECT last_name,salary,department_id FROM employees WHERE department_id10 OR department_id20 …

Unreal游戏初始化流程

前言 本文主要是总结Unreal在游戏启动时的初始化流程&#xff0c;包括讨论PIE和Standalone的区别&#xff0c;避免把一些初始化逻辑放在不合适的位置&#xff0c;比如我希望在所有Actor BeginPlay后执行某个逻辑&#xff0c;那我如果把它放在Subsystem的initialize中显然就会搞…

Golang使用ReverseProxy实现反向代理

目录 1.源码结构体 2.官方单机示例 3.使用示例 4.简单的http服务&#xff08;用于测试&#xff09; 1.源码结构体 type ReverseProxy struct {// Rewrite 必须是一个函数&#xff0c;用于将请求修改为要使用 Transport 发送的新请求。然后&#xff0c;其响应将原封不动地…

打造古风炫酷个人网页:用HTML和CSS3传递笔墨韵味

需要用到的背景大家可以自己找喜欢的风格!!! 当然俺把俺用的背景放到文章最后了哦&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 感谢关注和支持 长期更新哦~~~ 1. 简洁的页面布局&#xff1a;保持优雅和对称 在古风设计中&#xff0c;布局的对称性非常重要…

【知识图谱】3.Protege下载安装

一、Protege 1.相关介绍 Protg软件是斯坦福大学医学院生物信息研究中心基于Java语言开发的本体编辑和知识获取软件&#xff0c;或者说是本体开发工具&#xff0c;也是基于知识的编辑器&#xff0c;属于开放源代码软件。 这个软件主要用于语义网中本体的构建&#xff0c;是语义…

第15-02章:理解Class类并获取Class实例

我的后端学习大纲 我的Java学习大纲 1、Java反射机制原理图&#xff1a; 源代码通过Javac编译得到字节码文件&#xff0c;当我执行到new一个对象的时候&#xff0c;字节码文件会通过ClassLoader被加载&#xff0c;然后得到一个Class类对象&#xff0c;存放在堆中&#xff0c;加…

系统分析师10:知识产权与标准化

1 内容提要 保护范围与对象&#xff08;★★★★)保护期限&#xff08;★)知识产权人确定(★★★)侵权判断(★★★)标准的分类标准代号的识别 2 保护范围与对象 使用许可 按照被许可使用权的排他性强弱不同&#xff0c;可以将使用许可分为以下三种: ①独占使用许可-仅1个授权…