【哈希表】HashSet HashMap LeetCode习题

news2024/9/27 21:26:24

目录

136.只出现一次的数字

137.只出现一次的数字 ||

217.存在重复元素 

219.存在重复元素 ||

771.宝石与石头

旧键盘(牛客)


首先需要导包  import java.utli.*;

表中常用的是前两个,时间复杂度低。O(1)

Set<E> set = new HashSet<>();

set.contains(E);

set.add(E);

set.remove(E);

返回值都为boolean

Map<K,V> map = new HashMap<>();    键值对  (key , value)

map.put(K,V); 

map.get(K);    返回值为V

           背后时间复杂度    常用方法
        HashSet   哈希表              O(1)

     add() 

   remove()

  contains()

       HashMap   哈希表     O(1)

       put() 

       get()

        TreeSet二叉搜索树   O(logn)
       TreeMap二叉搜索树   O(logn)

136.只出现一次的数字

使用异或的特点HashSet的特点都行

0^A=A  ;    A^A=0

 算法代码

class Solution {
    public int singleNumber(int[] nums) {
        
        // 1 使用异或   0^A=A   A^A=0
        /*int tmp = 0;
        for(int i=0;i<nums.length;i++) {
            tmp = tmp^nums[i];
        }
        return tmp;*/

       // 2 使用HashSet的特点 不重复
        Set<Integer> set = new HashSet<>();   
        for(int i=0;i<nums.length;i++) {
            if(set.contains(nums[i])) {
                set.remove(nums[i]);
            }else {
                set.add(nums[i]);
            }
        }
        for(int i=0;i<nums.length;i++) {
            if(set.contains(nums[i])) {
                return nums[i];
            }
        }
        return -1;
    }
}

137.只出现一次的数字 ||

依旧是用 HashSet 异或 也能做

class Solution {
    public int singleNumber(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for(int i=0;i<nums.length;i++) {
            if(set.contains(nums[i])) {
                set.remove(nums[i]);
            }else {
                set.add(nums[i]);
            }
        }

        for(int i=0;i<nums.length;i++) {
            if(set.contains(nums[i])) {
                return nums[i];
            }
        }

        return -1;
    }
}

217.存在重复元素 

首先想到HashSet,HashMap都可以做,但时间复杂度上HashSet更适合。O(1)

class Solution {
    public boolean containsDuplicate(int[] nums) {
        /*Map<Integer,Integer> map = new HashMap<>();
        for(int i:nums) {
            if(map.get(i) == null) {
                map.put(i,1);
            }else{
                return true;
            }
        }

        return false;*/


        Set<Integer> set = new HashSet<>();
        for(int i:nums) {
            if(!set.add(i)) {
                return true;
            }
        }
        return false;

    }
}

219.存在重复元素 ||

首先想到HashSet,HashMap,但不同的是

 这道题由于与元素和索引都有关,故 MapSet 更适合。

import java.util.*;
class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Map<Integer,Integer> map = new HashMap<>();
        
        for(int i=0;i<nums.length;i++) {
            if(map.get(nums[i]) == null) {
                map.put(nums[i],i);
                
            }else {
                if(Math.abs(i-map.get(nums[i])) <= k) {
                    return true;
                }else{
                     map.put(nums[i],i);
                }
                
            }
        }
        return false;
    }
}

771.宝石与石头

使用 HashSet TreeSet 都行,

不过 HashSet 背后是二叉搜索树,时间复杂度是O(logn)。

而 TreeSet 背后是哈希表,时间复杂度是O(1)

相同点都是存储的值不重复的。

故以后刷题就用 HashSetHashMap,背后都是哈希表时间复杂度低。

 jewels都是唯一的。

class Solution {
    public int numJewelsInStones(String jewels, String stones) {
        int count = 0;
        HashSet<Character> hash = new HashSet<>();
        //TreeSet<Character> hash = new TreeSet<>();  
        for(int i=0;i<jewels.length();i++) {
            hash.add(jewels.charAt(i));
        }

        for(int i=0;i<stones.length();i++) {
            if(hash.contains(stones.charAt(i))) {
                count++;
            }
        }
        return count;

    }
}

旧键盘(牛客)

依旧使用hashSet

 题目要求字母是大写输出,故先变为大写,再把少的存入HashSet。再用方法contains()进行比较。

import java.util.Scanner;
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
 
        while (in.hasNext()) {
            String a = in.nextLine();
            String b = in.nextLine();
            func(a,b);
        }
    }
    public static void func(String s1,String s2) {
        HashSet<Character> hash1 = new HashSet<>();
        //HashSet<Character> hash2 = new HashSet<>();
        for(char ch:s2.toUpperCase().toCharArray()) {
            hash1.add(ch);
        }
        for(char ch:s1.toUpperCase().toCharArray()) {
            if(!hash1.contains(ch)) {
                hash1.add(ch);
                System.out.print(ch);
            }
        }
    }
 
}

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

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

相关文章

使用VSCode配置简单的vue项目

由于最近要使用的项目框架为前后端分离的&#xff0c;采用的是vue.jswebAPI的形式进行开发的。因为之前我没有接触过vue.js&#xff0c;也只是通过视频文档做了一些简单的练习。今天技术主管说让大家熟悉下VSCode开发vue&#xff0c;所以自己摸索了好久&#xff0c;才算是把简单…

2023年7月京东扫地机器人行业品牌销售排行榜(京东数据产品)

伴随消费者解放双手的消费需求&#xff0c;我国清洁电器行业快速发展。且随着消费回暖&#xff0c;我国扫地机器人市场也开始慢慢走出寒冬&#xff0c;止跌回升。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年7月份&#xff0c;京东平台扫地机器人的销量为16万&…

正中优配:港股迎来估值“黄金坑” 哪个点位介入胜率高?

近两周&#xff0c;港股向下突破了一切技能短线支撑信号。在新的技能信号构成前&#xff0c;港股有望迎来估值压力的开释&#xff0c;带来一个估值“黄金坑”。当估值回到“轻视”区间时&#xff0c;咱们信任港股对全球资本的吸引力将再次凸显。详细而言&#xff0c;咱们用两种…

eDP接口的PCB布局布线要求

eDP接口是一种基于DisplayPort架构和协议的一种全数字化接口&#xff0c;传递高分辨率信号只需要较简单的连接器以及较少的引脚就可以实现&#xff0c;同时还能够实现多数据同时传输。 图1 EDP接口 eDP接口的PCB设计布局布线注意事项&#xff1a; 1、远离干扰源&#xff0c;防…

让eslint的错误信息显示在项目界面上

1.需求描述 效果如下 让eslint中的错误&#xff0c;显示在项目界面上 2.问题解决 1.安装 vite-plugin-eslint 插件 npm install vite-plugin-eslint --save-dev2.配置插件 // vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue import e…

vue3 中wangEditor富文本编辑器上传图片功能

前端代码&#xff1a; wangEditor中要实现上传图片功能需要在editorConfig中添加一个对象属性。 const editorConfig { placeholder: "请输入内容...", MENU_CONF: {} }; 然后根据官方文档上的方法&#xff0c;填写uploadImage的上传地址 editorConfig.MENU_CONF[&q…

安卓主板定制_电磁屏/电容屏安卓平板基于MTK联发科方案定制

定制化行业平板 在各行各业中的地位越来越重要&#xff0c;甚至在行业转型和发展中发挥着不可替代的作用。随着工业化社会的快速发展&#xff0c;工业生产对智控设备要求越来越高&#xff0c;运用的范畴也越来越普遍广泛&#xff0c;工业级平板就是其中一种应用广泛的设备。 新…

什么是CSS中的BFC?

①什么是BFC BFC 全称&#xff1a;Block Formatting Context&#xff0c; 名为 “块级格式化上下文”。 W3C官方解释为&#xff1a;BFC它决定了元素如何对其内容进行定位&#xff0c;以及与其它元素的关系和相互作用&#xff0c;当涉及到可视化布局时&#xff0c;Block Forma…

Python2 和Python3的共存和切换

1、电脑中安装python2和python3&#xff0c;将python2,python3的路径都添加到环境变量中 2、修改python2目录中的Python.exe为python2.exe&#xff0c;使用python2命令启动 3、修改python3目录中的python.exe为python3.exe&#xff0c;使用python3命令启动 4、更新pip命令 修…

item_search_seller-搜索店铺列表

一、接口参数说明&#xff1a; item_search_seller-搜索店铺列表&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_search_seller 名称类型必须描述keyString是调用key&#x…

哪些人适合参加大数据培训班?

互联网加速职场变革&#xff0c;大数据浪潮席卷全球。日前&#xff0c;Python、大数据、人工智能是当今最热门的话题。大数据存储、大数据分析、 人工智能等开发人才需求旺盛。 大数据培训班有大数据分析培训班、大数据开发培训班&#xff0c;JAVA培训班 大数据班适学人群…

单点登陆案例实现

一 单点登陆系统简介 单点登录&#xff08;Single Sign On&#xff09;&#xff0c;简称为 SSO&#xff0c;是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。 例如&#xff1a;QQ、…

exe指定自带jre环境执行--exe4j使用注意点

不要打钩,允许使用jre运行而不仅仅是jdk 将jre复制粘贴到exe目录下,和我吗的exe在同一文件夹

Flowable学习[一]

一、参考CSDN博主[水中加点糖]的博客[采用springbootflowable快速实现工作流]&#xff0c;文章地址&#xff1a;https://puhaiyang.blog.csdn.net/article/details/79845248&#xff0c;下载其发布在github上的代码 二、本地解压代码&#xff0c;并加载到idea中 三、使用docke…

使用three.js与WebGL相比有什么优势?

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 特点 WebGL和Three.js是两个与网页3D图形渲染相关的技术。以下是它们的一些特点&#xff1a; WebGL: 基于OpenGL ES标准&#xff0c;为网页提供了一种基于GPU加速的图形渲染API。具有高性能的图像处…

期权攻略:手续费、保证金、期权账户租赁、零门槛开户哪家强?

期权开户的手续费和保证金收取方式可能因不同的券商和期权分仓平台而异。一般来说&#xff0c;期权手续费是根据交易的类型和数量张数来计算的&#xff0c;可以是固定费用或按比例收取&#xff0c;下文介绍期权攻略&#xff1a;手续费、保证金、期权账户租赁、零门槛开户哪家强…

[ubuntu]ubuntu18.04使用自带共享桌面实现vncserver连接

vncserver有很多方法比如你安装vnc4server,tightvncserver,x11vnc等都可以实现vnc局域网连接&#xff0c;今天使用系统共享桌面设置vnc连接 Ubuntu开启远程桌面 Ubuntu18.04使用gnome桌面环境&#xff0c;系统自带屏幕共享和远程登录功能&#xff0c;默认使用的是vino作为VNC…

PyTorch深度学习实战(12)——数据增强

PyTorch深度学习实战&#xff08;12&#xff09;——数据增强 0. 前言1. 图像增强1.1 仿射变换1.2 亮度修改1.3 添加噪音1.4 联合使用多个增强方法 2. 对批图像执行图像增强3. 利用数据增强训练模型小结系列链接 0. 前言 数据增强是指通过对原始数据进行一系列变换和处理&…

三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能

陈老老老板&#x1f934; &#x1f9d9;‍♂️本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09;生活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f9d9;‍♂️本文简述&#xff1a;三款远程控制软件对比&#xff0c;5大挑选指标&#xff1…

两款开箱即用的Live2d

目录 背景第一款&#xff1a;开箱即用的Live2d在vue项目中使用html页面使用在线预览依赖文件地址配置相关参数成员属性源码 模型下载 第二款&#xff1a;换装模型超多的Live2d在线预览代码示例源码 模型下载 背景 从第一次使用服务器建站已经三年多了&#xff0c;记得那是在2…