LeetCode日记——【数据结构】哈希表专题

  题1:两数之和( Two Sum)

LeetCode题号:1

难度:Easy

链接

题目描述:

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

代码:

 1 class Solution {
 2     public int[] twoSum(int[] nums, int target) {
 3         HashMap <Integer,Integer> hm = new HashMap<>();
 4         for(int i=0;i<nums.length;i++){
 5             if(hm.containsKey(target-nums[i])){
 6                 return new int[]{hm.get(target-nums[i]),i};
 7             }else{
 8                 hm.put(nums[i],i);
 9             }
10         }
11         return null;       
12     }
13 }

分析:

定义一个HashMap。依次将数组中的数(key),对应的下标(value)存入该HashMap。每次都判断当前数字是否在HashMap中存在数字,与其配对之和为target。如果是,则直接返回两数下标,若否,继续往HashMap中存放键值对,然后再判断。

  题2:存在重复元素(Contains Duplicate)

LeetCode题号:217

难度:Easy

链接

题目描述:

给定一个整数数组,判断是否存在重复元素。

如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

1 class Solution {
2     public boolean containsDuplicate(int[] nums) {
3         Set <Integer> set = new HashSet<>();
4         for(int num:nums){
5             set.add(num);
6         } 
7         return nums.length>set.size();
8     }
9 }

分析:

利用HashSet中元素不可重复的特点,将nums数组中的元素一个个存入HashSet。如果有重复的,HashSet会自动覆盖。最后比较HashSet的长度与数组长度,就可以判断是否有重复数字。

猜你喜欢

转载自www.cnblogs.com/augenstern/p/12964715.html