1、两数之和
一下就能想到暴力解法,就是一个两个遍历。
class Solution { public int[] twoSum(int[] nums, int target) { int[] sum = new int[2]; for(int i = 0;i<nums.length;i++){ for(int j = i+1;j<nums.length;j++){ if(nums[i]+nums[j]== target){ sum[0]=i; sum[1]=j; return sum; } } } return sum; } }
可以改进的点。可以直接返回一个新建的数组。
return new int[]{i,j}; hashmapclass Solution { public int[] twoSum(int[] nums, int target) { Map<Integer,Integer> FindTwoSum = new HashMap<>(); for(int i = 0;i<nums.length;i++){ if(FindTwoSum.containsKey(target - nums[i])){ return new int[]{FindTwoSum.get(target - nums[i]),i}; }else { FindTwoSum.put(nums[i],i); } } return new int[0]; } }
hashmap的解题思想很简单。注意一下hashmap的构建和查找就可以。了解一下hashmap
首先了解一下hash:
看了一些hash的浅显讲解,大意就是散列。将一个输入,利用写好的一个函数(hash)函数,对它做变换,得到一个固定长度的输出(key)。
目的:1、可以减少存储空间的占用,输出的大小是固定的。而且尽可能保证各个key出现的概率均匀。不同的输入通过这个H()函数的变换是有可能产生一样的key。尽量编写合适的hash函数来减少这个概率。(抗碰撞能力)
2、加密储存。hash的过程是不可逆的,就算你知道输出值,但是你没有办法得到输入。用于储存密码。而且输入稍微一改动,输出的hash值也会产生很大变化(抗篡改能力)
散列表(hash)
key key的存储地址之间(hashcode)的隐射关系。散列函数hash ,hash(key)= addre
冲突:key 不一样,隐射的add是相同的。冲突的解决。
hash构造——定义域要包括所有key,hash计算的address要尽可能等概率均匀的分布在地址空间中,尽量简单(减少计算开销)
1、直接定地址法。hash(key)= aKey + b
2、除留余数法。取不大于表长m的最大质数p,hash(key) = key %p
标签:hash,hashmap,int,函数,day1,力扣,key,new,刷题 From: https://www.cnblogs.com/joy-chen35/p/17038400.html