【LeetCode热题100】哈希篇

news2024/11/26 0:40:16

两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

答案:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums.length;i++){
            if(map.containsKey(target-nums[i])){
                return new int[]{map.get(target-nums[i]),i};
            }
            map.put(nums[i],i);
        }
        return new int[0];
    }
}

解题思路:

这道题可以暴力枚举,主要的挑战点在降低时间复杂度为O(N)。我们可以将两数相加等于target值改为target减去其中一个值等于另外一个值,一次遍历,如果能找到对应的key则返回坐标,不能找到则将值和坐标放入map。

字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

答案:

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String,List<String>> map=new HashMap<>();
        
        for(String str:strs){
            char[] array=str.toCharArray();
            Arrays.sort(array);
            String key=new String(array);
            List<String> list=map.getOrDefault(key,new ArrayList<String>());
            list.add(str);
            map.put(key,list);
        }

        return new ArrayList<List<String>>(map.values());
    }
}

解题思路:

异位词虽然顺序不同,但是长度和内容都是一样的,所以可以先转化为数组(使用toCharArray()方法),然后再用工具类的Arrays.sort()方法将其排序作为哈希表的键。

此外,哈希表的值是空的list数组或者是相同键对应的异位词集合,无论哈希表是否能够查到键对应的值,都应将字符串加入到list集合,并放入map集合中,其中排序好的字符串作为键,list集合作为值。

最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

答案:

class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums.length==0) return 0;

        HashSet<Integer> set = new HashSet<Integer>();
        for(int i=0;i<nums.length;i++){
            set.add(nums[i]);
        }
        
        int longestLength=1;
        for(int num:set){
            if(!set.contains(num-1)){
                int currentNum=num;
                int currentLength=1;

                while(set.contains(currentNum+1)){
                    currentNum+=1;
                    currentLength+=1;
                }

                longestLength=Math.max(longestLength,currentLength);

            }
        }
        return longestLength;
    }
}

解题思路:

这道题要排除特殊情况[1,1,0,2,3],存在这种情况的时候排序依次加一求得最长序列显然是不可取的,这就是本题的关键之一:去重。我们可以考虑用HashSet存储。

此外,因为用迭代器不太方便,我们可以用set.contains(num+1)的方法判断是否存在连续值。这里需要考虑,连续的时候既可以是num-1,也可以是num+1,我们必须拿捏住一头,才会防止num处于中间而重复计算的问题。这也是本题的关键之一,可以用判断if(!set.contains(num-1))来确定num是这个序列的最小值。

当我们确定num是最小值的时候,就可以判断是否存在set.contains(num+1),并根据情况更迭num和cnt的值即可。


第一天❀

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

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

相关文章

短视频抖音账号矩阵系统源码开发分享

引用&#xff1a;MySQL数据库&#xff0c;NGINX&#xff0c;PHP7.4&#xff0c;MySQL5.7&#xff0c;redis 媒体组件 组件 描述 image 图片 图片。支持 JPG、PNG、SVG、WEBP、GIF 等格式。 video 视频 视频组件。相关 API 请参考 tt.createVideoContext。 开发背景&…

Fiddler的使用方法介绍

FIDDLER下载地址fiddler Fiddler可以帮您记录&#xff0c;调试Microsoft Internet Explorer与Web应用程序的交互&#xff0c;找到Web程序运行性能的瓶颈&#xff0c;还有如查看向Web服务器发送cookies的内容&#xff0c;下载内容的大小等功能。 说多一点是&#xff0c;Fiddler站…

docker-compose部署sentinel-dashboard-1.8.5

一、创建文件夹 mkdir -p /docker/alibaba/sentinel/{config,data,logs} 二、拷贝jar包进sentinel目录下 三、Dockerfile文件 FROM openjdk:8-jre MAINTAINER yh COPY ./sentinel-dashboard.jar /app.jar EXPOSE 8718 ENTRYPOINT ["java", "-jar", &quo…

【Linux C】fseek函数使用小结

0x00 前言 演示使用的Linux版本&#xff08;#cat /etc/issue&#xff09;&#xff1a;Ubuntu 18.04.6 LTS \n \l 最后更新日期&#xff1a;2023.7.17 0x01 fseek函数使用小结 1.函数描述 设置stream文件的位置指针偏移到指定位置1。 2.声明 #include <stdio.h> in…

LVS—Linux Virtual Server

集群和分布式 系统性能拓展方式&#xff1a; Scale UP&#xff1a;垂直拓展&#xff0c;提高单个服务器的性能&#xff0c;如增加CPU、内存等&#xff0c;单台服务器的性能是有上限的&#xff0c;不可能无限制垂直拓展。Scale Out&#xff1a;水平拓展&#xff0c;增加设备&a…

用Python采集电商平台商品数据进行可视化分析

目录标题 前言环境使用:模块使用:基本流程思路:代码展示获取数据扩展知识数据可视化 尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: python 3.8 解释器 pycharm 编辑器 模块使用: 第三方模块 需要安装 requests —> 发送 HTTP请求 内置模块 不需…

嵌入式处理器常用存储介质

一、存储器 二、XIP设备 XIP(excute in place)&#xff0c;本地执行。像上述nor flash这种设备&#xff0c;上电后不需要初始化&#xff0c;CPU通过地址总线和数据总线直连的&#xff0c;可以直接访问并取址执行&#xff0c;称之为XIP设备。 像emmc这种&#xff0c;在SOC内部有…

JVM打印GC信息

-XX:PrintGCDetails 一、代码 public class GcDemo {public static void main(String[] args) {Object obj new Object();obj null;System.gc();} } 二、配置 三、测试 [GC (System.gc()) [PSYoungGen: 5242K->872K(152576K)] 5242K->880K(500736K), 0.0011529 sec…

如何使用 Amazon Systems Manager 集中管理 Amazon IoT Greengrass 设备

对于边缘设备管理员来说&#xff0c;远程管理大量不同的系统和应用程序会是一项富有挑战性的任务。Amazon IoT Greengrass 可帮助这些系统管理员管理其边缘设备应用程序堆栈。不过&#xff0c;这些设备上的系统软件必须通过与其大型 IT 企业的运营策略一致的运营策略来单独更新…

文件共享服务器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、FTP连接类型 三、端口 四、工作模式 五、安装配置 1、 服务名 2、主配置文件 3、 用户控制文件 4、 用户验证类型 5、 安装 6、 匿名用户验证 7、本…

python操作Elasticsearch数据库

Elasticsearch&#xff08;ES&#xff09;,ES是一个开源的高扩展的分布式全站搜索引擎&#xff0c;是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。 安装好ES之…

go mod 设置国内源 windows 环境 win10

启用 go module 功能 go env -w GO111MODULEon 配置 goproxy 变量 go env -w GOPROXYhttps://goproxy.cn,direct 下载包就行了&#xff0c;速度飞快 go mod tidy 检测 goproxy 是否配置好 运行 go env | findstr goproxy 查看 goproxy Go module 从 Go v1.12 版本开始存在&a…

springboot3+vue3 前后端分离项目模板

更好的阅读体验 \color{red}{更好的阅读体验} 更好的阅读体验 项目地址 功能简介-视频演示 功能概要 支持登录和注册功能。支持密码找回和邮箱验证。支持“记住我”功能。包含完整的上述功能的基础页面。 登录功能 支持“用户名/密码”登录。登录可选“记住我”&#xff0c;勾…

域名+云服务器+springBoo:怎样零成本进行云服务器的学习

零成本进行云服务器的学习 1.项目开发需要学习云服务器的使用 2.申请域名 为了让服务器运行我的springBoot项目&#xff0c;我们首先需要一个域名&#xff0c;很多网站提供免费域名的使用申请&#xff0c;我在阿里云上申请了一年域名的体验。 3.将域名绑定到三丰云&#xff0c…

WCF的IIS宿主部署

IIS的web服务开启网上已经很多&#xff0c;不再赘述。 关键点&#xff1a;WCF发布的文件夹要加上IIS的权限能够读取。否则报没有权限。

动态规划——删除并获得点数

题目链接 leetcode在线oj题——删除并获得点数 题目描述 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums…

SQL性能分析——执行频率、慢查询日志、profile详情

1.SQL的执行频率 2.慢查询日志 show variables like slow_query_log;修改完成以后&#xff0c;再次查询以后发现&#xff0c;slow_query_log的开关时开着的。 3.profile详情

BGP实验--联邦

1&#xff0c;AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24 该地址不嫩在任何协议中宣告 AS3中存在两个环回&#xff0c;一个地址为192.168.2.0/24该地址不能再任何协议中宣告&#xff0c;最终要求这两个环回可用互相通讯 AS1中的另一个环回为10.0.0.0 24&#…

在 Linux 系统上下载 Android SDK

使用ubuntu系统进行车机开发&#xff0c;今天开始配置环境&#xff0c;首先是下载android studio&#xff0c;然后下载android sdk&#xff0c;这里需要注意的是linux系统不能使用windows系统下的Android sdk&#xff0c;亲测会出现各种问题。 常规思路&#xff0c;下载sdk&am…

【前端知识】JavaScript——<script>的8个属性

【前端知识】JavaScript——<script>的8个属性 <script>元素的8个属性&#xff1a; 属性释义async表示应该立即开始下载脚本&#xff0c;但不能阻止其他页面动作&#xff0c;比如下载资源或等待其他脚本加载。只对外部脚本文件有效。charset使用 src 属性指定的代…