今日算法_两数之和

这篇博客讨论了如何使用哈希表在给定数组中高效地找到两数之和等于目标值的元素下标。通过创建哈希表并存储每个元素及其下标,可以在O(1)的时间复杂度内查找目标值的另一半。示例展示了在数组[2, 7, 11, 15]和目标值9的情况下,如何返回下标[0, 1]。此外,还介绍了JAVA中哈希表的基本概念、构造方法和常用操作方法。
摘要由CSDN通过智能技术生成

两数之和

题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

示例

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

方法:

使用哈希表,可以将寻找 target - x 的时间复杂度降低到从 O(N) 降低到 O(1)。

这样我们创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();//创建哈希表
        for (int i = 0; i < nums.length; ++i) {
            if (hashtable.containsKey(target - nums[i])) {
                return new int[]{hashtable.get(target - nums[i]), i};
            }
            hashtable.put(nums[i], i);  //如果不存在,就将键值对存入哈希表
        }
        return new int[0];
    }
}
JAVA中的哈希表

哈希表主要是一个Dictionary具体的实现,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引

JAVA哈希表的构造方法

默认构造方法:Hashtable()
构造函数创建指定大小的哈希表:Hashtable(int size)
构造方法创建了一个以M中元素为初始化元素的哈希表。哈希表的容量被设置为M的两倍:Hashtable(Map m)

JAVA哈希表定义的方法

1、void clear( ),将此哈希表清空,使其不包含任何键。
2、Object clone( ),创建此哈希表的浅表副本。
3、boolean contains(Object value),测试此映射表中是否存在与指定值关联的键。
4、boolean containsKey(Object key),测试指定对象是否为此哈希表中的键。
5、boolean containsValue(Object value),如果此 Hashtable 将一个或多个键映射到此值,则返回 true。
6、Enumeration elements( ),返回此哈希表中的值的枚举。
7、Object get(Object key),返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。
8、boolean isEmpty( ),测试此哈希表是否没有键映射到值。
9、Enumeration keys( ),返回此哈希表中的键的枚举。
10、Object put(Object key, Object value),将指定 key 映射到此哈希表中的指定 value。
11、void rehash( ),增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。
12、Object remove(Object key),从哈希表中移除该键及其相应的值。
13、int size( ),返回此哈希表中的键的数量。
14、String toString( ),返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值