哈希表 java

2023-11-02

 

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

案例:

s = "leetcode"
返回 0.

s = "loveleetcode",
返回 2.

 

public class solu {

    public int ff(String s){
        int[] li=new int[26];
        for (int i=0;i<s.length();i++)
            li[s.charAt(i)-'a'] ++;
        for (int i =0;i<s.length();i++)
            if(li[s.charAt(i)-'a']==1)
                return i;
        return -1;
        }
    public static void main(String[] args) {
        solu so=new solu();
        System.out.println(so.ff("vavavadfs"));
    }
    }

C++

class Solution {
public:
    int firstUniqChar(string s) {
        int n=s.size();
        map<char,int> mp;
        for(int i=0;i<n;i++)
            mp[s[i]]+=1;
        for(int i=0;i<n;i++)
            if(mp[s[i]]==1)
                return i;
        return -1;
    }
};

其中 int[26] li  就是一个哈希表

哈希函数的设计

 

小范围正整数直接使用

小范围负整数可以偏移成正整数

 

import java.util.Map;
import java.util.TreeMap;

public class HashTable<K, V> {

    private static final int upperTol = 10;
    private static final int lowerTol = 2;
    private static final int initCapacity = 7;

    private TreeMap<K, V>[] hashtable;
    private int size;
    private int M;

    public HashTable(int M){
        this.M = M;
        size = 0;
        hashtable = new TreeMap[M];
        for(int i = 0 ; i < M ; i ++)
            hashtable[i] = new TreeMap<>();
    }

    public HashTable(){
        this(initCapacity);
    }

    private int hash(K key){
        return (key.hashCode() & 0x7fffffff) % M;
    }

    public int getSize(){
        return size;
    }

    public void add(K key, V value){
        TreeMap<K, V> map = hashtable[hash(key)];
        if(map.containsKey(key))
            map.put(key, value);
        else{
            map.put(key, value);
            size ++;

            if(size >= upperTol * M)
                resize(2 * M);
        }
    }

    public V remove(K key){
        V ret = null;
        TreeMap<K, V> map = hashtable[hash(key)];
        if(map.containsKey(key)){
            ret = map.remove(key);
            size --;

            if(size <= lowerTol * M && M > initCapacity)
                resize(M / 2);
        }
        return ret;
    }

    public void set(K key, V value){
        TreeMap<K, V> map = hashtable[hash(key)];
        if(!map.containsKey(key))
            throw new IllegalArgumentException(key + " doesn't exist!");

        map.put(key, value);
    }

    public boolean contains(K key){
        return hashtable[hash(key)].containsKey(key);
    }

    public V get(K key){
        return hashtable[hash(key)].get(key);
    }

    private void resize(int newM){
        TreeMap<K, V>[] newHashTable = new TreeMap[newM];
        for(int i = 0 ; i < newM ; i ++)
            newHashTable[i] = new TreeMap<>();

        for(int i = 0 ; i < M ; i ++)
            for(K key: hashtable[i].keySet())
                newHashTable[hash(key)].put(key, hashtable[i].get(key));

        this.M = newM;
        this.hashtable = newHashTable;
    }
}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈希表 java 的相关文章

  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static

随机推荐

  • JVM知识总结

    JVM知识点总结 什么是jvm jvm就是java虚拟机 本质上是一个程序虚拟机 所以我们首先得搞懂什么是虚拟机 虚拟机是在操作系统上层的一款软件 分为程序虚拟机和系统虚拟机 程序虚拟机就是用于执行程序的 系统虚拟机可以用于模拟一台物理设备
  • 深度学习的基础知识与问题汇总

    20200813 引言 这里记录一下深度学习使用过程中的一些细节的地方 多分类时 预测过程 损失函数为Nan或者Inf 如何在keras中计算精确率和召回率 如何获取中间某一层的输出 如何获取网络结构 从别人的存储的h5模型文件中 关于so
  • VSCode设置git-bash终端,显示分支名(未解决)

    学习时发现我的终端不能像老师的这样显示分支名 解决方法如下 设置git bash终端 file gt preferences gt settings 搜索window 编辑settings json 添加以下内容 这里出现了一个问题 我直接
  • AD22如何添加元器件库

    1 打开libPkg项目 2 编译 3 查看添加好的库 4 查看添加好的库 当然 如果你手上有IntLib文件 已经编译好的库 可以直接点击install 进行安装 比如从这个地方去下载 1 Other Installers User Ma
  • no such file or directory, scandir ‘xxxxxnode_modules/node-sass/vendor‘

    Syntax Error Error ENOENT no such file or directory scandir xxxxx node modules node sass vendor 一 报错信息 Syntax Error Erro
  • Redis+Mysql模式和内存+硬盘模式的异同

    学习任何新知识 都是一个循序渐进的过程 从刚开始的懵懂无知 到简单熟悉 然后突然的彻悟 成果让人欣喜若狂 心情也会快乐很久 redis mysql和内存 硬盘类似的地方 首先看图 首先 我们知道 mysql是持久化存储 存放在磁盘里面 检索
  • Latex:图片、表格占据双栏排版的两栏时 的位置控制

    目录 1 问题 怎么在双栏排版中 让占据两栏的表格出现在页面顶端 2 解决 在latex中加入 usepackage stfloats 即可 1 图片 占据两栏显示在页面顶端 2 表格 占据两栏显示在页面顶端 1 问题 怎么在双栏排版中 让
  • CMake buildsystem

    官方文档 https cmake org cmake help latest manual cmake buildsystem 7 html 介绍 基于CMake的构建系统 buildsystem 其组织形式是一组高级逻辑目标 high l
  • LR1语法分析C++实现:一、项目集簇的生成

    转载请注明出处 https blog csdn net hhhhhhhhhhkkkkkkkkkk 嗯 先上代码 后面慢慢写注释 我好像太鸡智 贼 了 哈哈 生成项目集簇 基本符号的定义与相关操作 using t sym int 符号 usi
  • 第十一届蓝桥杯(国赛)——质数行者

    问题描述 小蓝在玩一个叫质数行者的游戏 游戏在一个 n m w n m w n m w 的立体方格图上进行 从北到南依次标号为第 1
  • C++编程用梯形法求积分

    这是我们学校oj的作业可以看看 include
  • 一图抵千言:带你了解最直观的神经网络架构可视化

    一张好的图抵得上一千个等式 神经网络是复杂 多维 非线性的数组运算 如何在避免过于复杂或重复的情况下呈现深度学习模型架构的重要特征呢 又该以何种方式清晰直观 启发性地呈现它们呢 好看也是加分项 无论研究还是教学项目对此都没有固定标准 本文我
  • Redis3.0集群完全版(数据迁移问题)

    Redis3 0集群安装手册 一 概述 要让集群正常工作至少需要3个主节点 在这里我们要创建6个Redis节点 其中三个为主节点 三个为从节点 对应的redis节点的ip和端口对应关系如下 127 0 0 1 7000127 0 0 1 7
  • 图说三极管,太容易懂了!(史上最详细版本)

    晶体三极管 是半导体基本元器件之一 具有电流放大作用 是电子电路的核心元件 在电子元件家族中 三极管属于半导体主动元件中的分立元件 广义上 三极管有多种 常见如下图所示 狭义上 三极管指双极型三极管 是最基础最通用的三极管 本文所述的是狭义
  • 阻止Mac版 Adobe Acrobat Pro DC的顽固的自动更新

    阻止Mac版 Adobe Acrobat Pro DC的顽固的自动更新 方案一 无效 方案二 无效 方案三 无效 方案四 验证了一年 应该有效 在mac上安装强大的Adobe Acrobat Pro DC之后 你会发现使用AZii破解之后过
  • c++命令行解析

    发现一个项目中可以用的c 的命令行解析器封装 cmdline 下载地址 GitHub tanakh cmdline A Command Line Parser c 的命令行解析 只有一个 h文件 可直接加入项目 当然Qt有自己的命令行解析类
  • Java FTP按关键字批量下载文件

    一 所需jar
  • 离职方知人心凉!

    2018年初夏 还是大三的我 在班级群里看到老师发的一条招聘信息后 写了我人生中第一封简历 殊不知我鼓了多大勇气才点击 发送邮件 或许是缘分又或许是缺人 就这样我通过了一面二面 正式入职 由此开启了我的职业生涯 实习生的工资很低 但工作强度
  • 软件测试网上订餐系统,星月外卖网上订餐系统软件测试报告(正式).doc

    文档介绍 计算机科学与技术 1 班 网上订餐系统软件测试报告 小组名称 第五组 小组成员 魏川浩 黄星月 瞿坤杨 李多福 王伟 项目组成员 组长 魏川浩 班级学号 20140181 姓名 魏川浩 负责工作 手工输入测试用例并记录测试结果 评
  • 哈希表 java

    给定一个字符串 找到它的第一个不重复的字符 并返回它的索引 如果不存在 则返回 1 案例 s leetcode 返回 0 s loveleetcode 返回 2 public class solu public int ff String