题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的长度与数组长度,就可以判断是否有重复数字。