//朴素
class Solution0 {
public int[] twoSum(int[] nums, int target) {
for(int i=0;i<nums.length-1;i++)//遍历左指针
for (int j=i+1;j<nums.length;j++)//遍历右指针
if(nums[i]+nums[j]==target)//判断是否满足条件
return new int[]{i,j};//返回结果
return null;
}
}
//两遍哈希表
class Solution1 {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();//创建哈希表
for (int i=0;i<nums.length;i++){//遍历数组
map.put(nums[i],i);//将数,下标放入哈希表
}
for (int i=0;i<nums.length;i++){//遍历数组
int complement=target-nums[i];//计算补足数
if(map.containsKey(complement)&&map.get(complement)!=i){//找到补足数,且补足数不是此数本身
return new int[]{i,map.get(complement)};//返回结果
}
}
return null;//找不到返回空指针
}
}
//一遍哈希表
class Solution3 {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();//创建哈希表
for (int i=0;i<nums.length;i++){//遍历数组
int complement = target - nums[i];//计算补足数
if (map.containsKey(complement)){//在哈希表中查找
return new int[]{map.get(complement),i};//找到就返回
}
map.put(nums[i],i);//没找到,将当前数放入哈希表
}
return null;//实在没找到,返回null
}
}
//自制哈希表
class Solution{
public int[] twoSum(int[] nums, int target) {
int volumn = 2048;//定义哈希大小
int bitmode = volumn-1;//定义哈希方法
int[] homemadeHash = new int[volumn];//分配哈希堆内存
for (int i = 0;i<nums.length;i++){//遍历数组
int complement = target -nums[i];//计算补足数
if(homemadeHash[complement&bitmode]!=0){//找到补足数
return new int[]{i,homemadeHash[complement&bitmode]-1};//返回结果
}
homemadeHash[nums[i]&bitmode]=i+1;//没找到,将此数的下标加一存入哈希表
}
return null;//实在找不到就返回null
}
}
LeetCode JAVA 1. 两数之和
最新推荐文章于 2024-07-15 22:27:12 发布