【哈希表part01】| 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

news2024/9/20 16:36:47

目录

✿LeetCode242.有效的字母异位词❀

✿LeetCode349.两个数组的交集❀

✿LeetCode202.快乐数❀ 

✿LeetCode1.两数之和❀


✿LeetCode242.有效的字母异位词❀

链接:242.有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词

 这道题目字符串只包含小写字母,所以可以定义一个长度为26的数组,记录s中字符出现的个数,然后再遍历t,从recore中减去t中出现的字符,最后只需要判断recore是否全为0,代码如下:

public boolean isAnagram(String s, String t) {
        // s 和 t 仅包含小写字母
        char[] record=new char[26];
        for(int i=0;i<s.length();i++){
            record[s.charAt(i)-'a']++;
        }
        for(int i=0;i<t.length();i++){
            record[t.charAt(i)-'a']--;
        }
        for(int i=0;i<record.length;i++){
            if(record[i]!=0){
                return false;
            }
        }
        return true;
    }

测试用例:

  1. 输入两个字符出现次数相等的字符串
  2. 输入两个字符出现次数不相等的字符串
  3. 输入的两个字符串其中有一个为空
  4. 输入两个空字符串

✿LeetCode349.两个数组的交集❀

链接:349.两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序  

 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法

题目特意说明:输出结果中的每个元素一定是唯一的,也就是说输出的结果的去重的, 同时可以不考虑输出结果的顺序。我们可以用set来解决,代码如下:

public int[] intersection(int[] nums1, int[] nums2) {
        // 1 <= nums1.length, nums2.length <= 1000
        // 0 <= nums1[i], nums2[i] <= 1000
        Set<Integer> set=new HashSet<>();
        Set<Integer> result=new HashSet<>();
        for(int i=0;i<nums1.length;i++){
            set.add(nums1[i]);
        }
        for(int i=0;i<nums2.length;i++){
            if(set.contains(nums2[i])){
                result.add(nums2[i]);
            }
        }
        int[] arr=new int[result.size()];
        int j=0;
        for(int i:result){
            arr[j++]=i;
        }
        return arr;
    }

 又因为0 <= nums1[i], nums2[i] <= 1000,数据不是很大,我们也可以考虑用数组来解决,代码如下:

public int[] intersection(int[] nums1, int[] nums2) {
        int[] arr=new int[1000];
        Set<Integer> set=new HashSet<>();
        for(int i=0;i<nums1.length;i++){
            arr[nums1[i]]++;
        }
        for(int i=0;i<nums2.length;i++){
            if(arr[nums2[i]]!=0){
                set.add(nums2[i]);
            }
        }
        int[] result=new int[set.size()];
        int j=0;
        for(int i:set){
            result[j++]=i;
        }
        return result;
    }

✿LeetCode202.快乐数❀ 

链接:202.快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

 刚看到这道题时,完全没想到用哈希法,还想找一下规律,但是半天却没结果,看了题解之后才发现要用哈希法,这个会无限循环,就是看是否有重复的出现,那么久用set,代码如下:

public boolean isHappy(int n) {
        // 无限循环,判断是否会重复  用set
        int num=0;
        int sum=0;
        Set<Integer> set=new HashSet<>();
        while(sum!=1){
            sum=0;
            while(n!=0){
                num=n%10;
                n=n/10;
                sum+=num*num;
            }
            if(set.contains(sum)){
                return false;
            }
            set.add(sum);
            n=sum;
            
        }
        return true;
        
    }

测试用例:

  1. 输入一个快乐数
  2. 输入一个非快乐数
  3. 输入不合法的数字(如:0)

✿LeetCode1.两数之和❀

链接:1.两数之和

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

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

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

 当需要找一个元素是否在这个集合中出现过时,就想到用哈希法。本题就是找target-nums[i]是否出现在数组中出现,用HashMap,其中key存储的是数值,Value存储的是下标,代码如下:

public int[] twoSum(int[] nums, int target) {
        // 2 <= nums.length <= 104
        // 只会存在一个有效答案
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums.length;i++){
            // 看target-nums[i]是否在map中出现过
            if(map.containsKey(target-nums[i])){
                return new int[]{i,map.get(target-nums[i])};
            }
            map.put(nums[i],i);
        }
        //不存在
        return new int[]{-1,-1};
    }

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

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

相关文章

如何进行弱网测试?专项测试中最实用的方法了解一下……

目录 引言 一、什么是弱网测试&#xff1f; 二、为何要进行弱网测试&#xff1f; 三、如何做弱网测试&#xff1f; 四、弱网测试工具 引言 如今这个高度互联的时代里&#xff0c;网络环境对于应用程序的影响越来越重要。 而弱网测试就是用来检验应用程序在恶劣网络环境下…

AIGC与AidLux互联应用——AidLux端AIGC评测

使用diffusers生成图片&#xff0c;再通过socket编程完成pc端与AidLux之间通信&#xff0c;把生成的图像上传服务端&#xff0c;最后通过yolov5模型对生成的图像进行评测 视频流程如下&#xff1a; AIGC与AidLux互联应用——AidLux端AIGC评测 生成图片如图所示&#xff1a;

Redis的Java客户端-Java客户端以及SpringDataRedis的介绍与使用

1. Redis的Java客户端 Spring Data Redis底层支持同时兼容Jedis和Lettuce两种不同的Redis客户端&#xff0c;可以根据需要任意选择使用其中的一种。这样既可以保留现有代码使用的Jedis方式&#xff0c;也可以通过使用基于Netty的高性能Lettuce客户端&#xff0c;提升应用的性能…

【RabbitMQ教程】前言 —— 中间件介绍

&#x1f4a7; 【 R a b b i t M Q 教程】前言——中间件介绍 \color{#FF1493}{【RabbitMQ教程】前言 —— 中间件介绍} 【RabbitMQ教程】前言——中间件介绍&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云…

MySQL数据库基础 10

第十章 创建和管理表 1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.1 创建数据库2.2 使用数据库2.3 修改数据库2.4 删除数据库 3. 创建表3.1 创建方式13.2 创建方式23.3 查看数据表结构 4. 修改表4.1 追加一个列4.2 修改一…

Vue2模拟俄罗斯方块小游戏

目录 一、效果展示 二、代码分享 三、原理分析 3.1、界面搭建 3.2、方块创建 3.3、方块旋转 3.4、方块移动 3.5、移动判断 3.6、下落判断与清除 3.7、得分计算 一、效果展示 二、代码分享 <template><div class"game"><div class"ga…

调整IoTDB堆内存

最关键的是 MAX_DIRECT_MEMORY_SIZE &#xff0c;他等于MAX_HEAP_SIZE变量。 再往上翻又等于 max_heap_size_in_mb M大小 继续上翻 system_memory_in_mb 很明显就是系统内存&#xff0c;单位是M quarter_ 四分之一内存&#xff0c; half_ 一半内存。 假设物理内存为8G&a…

PMP证书含金量如何?到底有啥用处?

01PMP是什么&#xff1f; | PMP是指项目管理专业人士资格认证。 | 美国项目管理协会&#xff08;PMI&#xff09;举办的项目管理专业人员&#xff08;PMP&#xff09;认证考试。 | 是目前项目管理领域含金量很高的认证。 国内很多媒体也把PMP称为继MBA、MPA之后的三大金字招…

KW 新闻 | KaiwuDB 发布智慧矿山解决方案

5月21日&#xff0c;天津第七届世界智能大会&#xff08;WIC&#xff09;圆满落幕。作为智能领域的国家级盛会&#xff0c;WIC 汇聚了全球知名院士、顶级学者、产业领袖分享先进技术和实践经验&#xff0c;推进智能技术创新合作。KaiwuDB 受邀出席大会并正式发布智慧矿山解决方…

软件测试现状以及行业分析

大家都知道最近 ChatGPT 爆火&#xff0c;国外巨头争相宣布自己的相关计划&#xff0c;国内有点实力的企业也在亦步亦趋地跟进。不出意料的是&#xff0c;关于测试职业要被淘汰的话题又&#xff08;为什么要说又&#xff1f;&#xff09;在扎堆出现&#xff0c;内容跟之前还是大…

“大模型+小模型”新纪元开启,AI基础软件定义AI未来

5月30日&#xff0c;由中国信息通信研究院、浙江省经济和信息化厅、杭州市人民政府、中国人工智能产业发展联盟主办的“杭州通用人工智能论坛”盛大召开。杭州市人民政府党组成员、副市长孙旭东&#xff0c;浙江省经信厅总工程师李永伟&#xff0c;中国信息通信研究院党委副书记…

检索项目中冗余的图片

说在前面 平时在项目中我们会使用到一些图片&#xff0c;很多时候我们会直接将图片打包到项目中去&#xff0c;随着项目的更新迭代&#xff0c;我们可能会删除一些图片的引用&#xff0c;但没将图片源文件删除&#xff0c;这个时候没有被引用到的图片就会成为冗余的文件&#…

一位十年测试的修炼之路,希望能帮你点清现实

对于刚进入软件测试工作岗位的新人&#xff0c;如何快速、健康的在职业道路上成长&#xff0c;作者谈了几点自己看法&#xff1a; 1、兴趣是最好的老师 对于软件测试工作&#xff0c;通常是比较枯燥的&#xff0c;如果没有兴趣很难做到持久。 我最近参与了一个软件测试项目&a…

Android AIDL跨进程通信

一、前言 什么是AIDL&#xff1f;AIDL用来做什么的&#xff1f;怎么使用AIDL&#xff1f; AIDL是Android的一种接口定义语言&#xff0c;语法跟java接口定义类似&#xff0c;文件格式为 .aidl 非 .java 。AIDL主要是用来实现跨进程通信&#xff0c;AIDL的本质也是通过Binder机…

【集群】Haproxy搭建Web群集

文章目录 一、Haproxy 相关概念1. Haproxy 的概述2. Haproxy 的主要特性3. 常见的 Web 集群调度器4. 常见的应用分析4.1 LVS 应用4.2 Haproxy 应用4.3 LVS、Nginx、Haproxy的区别 5. Haproxy 调度算法原理5.1 roundrobin5.2 static-rr5.3 leastconn5.4 source5.5 uri5.6 url_pa…

【1 TypeScript - TypeScript语法的类型】

1 认识TypeScript 主要是为了解决类型检查的痛点.是拥有类型的JavaScript超集,虽然编写的是Typescript,但是最终仍然会编译成JavaScript代码. 2 TypeScript的运行环境 使用ts-node 3 变量的声明 变量的类型推导&#xff08;推断&#xff09; 4 JavaScript类型 – Array类…

ThinkPHP5源码阅读-类的自动加载register与autoload的实现

文章目录 前言如何下载ThinkPHP5源码关于自动加载类类的准备进入base.phpLoader::register() 注册自动加载函数对composer 的支持对think和trait的支持对extend目录的支持 类的加载autoload方法class_alias的定义和使用findFile 查找类 作业&#xff1a;自定义一个可以被自动类…

Java设计模式—责任链模式(Chin of Responsibility)

目录 前言 一、责任链模式的简介 二、责任链模式的概念 三、责任链模式的作用 四、责任链模式的优、缺点 1.责任链模式的优点 2.责任链模式的缺点 五、责任链模式的应用场景 六、代码案例 UML类图 1.定义一个请求枚举类 2.定义一个请求类 3.定义一个抽象处理接口 4、…

TS中any与unknown详解,示例

文章目录 前言一、一个示例二、示例目的1、功能描述2、主要区别3、代码实现 总结 前言 本片文章主要是在写ts时遇到不知道类型&#xff0c;很容易就想到用any可以解决一切&#xff0c;但这样写并不好。所以今天就总结学习一下&#xff0c;比较好的处理任意类型的unknown。 一、…

2023年最新网络安全入门指南,保姆级教程!啃完这篇就够了

一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;且过渡到网络安全用到编程的用到的编程的关键点不多。一般人如果想要把编程学好再开始学习网络安全往…