两数之和
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6 输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6 输出:[0,1]
看到题目第一眼,暴力枚举,两个for循环解决。
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] arr = new int[2];
for(int i = 0;i < nums.length;i++){
for(int j = i+1 ;j <= nums.length - 1;j++){
if(nums[i] + nums[j] == target){
arr[0] = i;
arr[1] = j;
}
}
}
return arr;
}
}
有没有更简单的方法。
哈希表
哈希表,又称为散列表,是一种基于哈希函数组织数据的数据结构。它允许我们根据键值快速查找、插入和删除对应的值。哈希表的核心思想是通过哈希函数,将键值映射到一个固定大小的数组中的某个位置。
在理想情况下,哈希表的查找、插入和删除操作都可以在常数时间内完成。如果可以结合哈希表正则可以大大缩短查找时间。
将已经遍历的数存入哈希表中,利用哈希表查找速度快的特点,查找当前的数的补数是否存在于哈希表中,如果存在则将下标存入数组即可。
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] sum = new int[2];
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i = 0;i < nums.length;i++){
if(map.containsKey(target-nums[i])){
sum[0] = i;
sum[1] = map.get(target-nums[i]);
break;
}
map.put(nums[i],i);
}
return sum;
}
}
同样还有一题也可以用到哈希表。
单词规律
给定一种规律 pattern
和一个字符串 s
,判断 s
是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern
里的每个字母和字符串 s
中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern ="abba", s ="dog cat cat dog"
输出: true
示例 2:
输入:pattern ="abba", s ="dog cat cat fish"
输出: false
示例 3:
输入: pattern ="aaaa", s ="dog cat cat dog"
输出: false
使用两个哈希表 map1
和 map2
来建立字符到单词和单词到字符的双向映射。
-
map1
用于存储字符到单词的映射。 -
map2
用于存储单词到字符的映射。
class Solution {
public boolean wordPattern(String pattern, String s) {
String[] arr2 = s.split(" ");
if(arr2.length != pattern.length()){
return false;
}
Map<Character,String> map1 = new HashMap<Character,String>();
Map<String,Character> map2 = new HashMap<String,Character>();
for(int i = 0 ;i < arr2.length;i++){
if(map1.containsKey(pattern.charAt(i))){
if(!map1.get(pattern.charAt(i)).equals(arr2[i])){
return false;
}
}
if(map2.containsKey(arr2[i])){
if(!map2.get(arr2[i]).equals(pattern.charAt(i))){
return false;
}
}
map1.put(pattern.charAt(i),arr2[i]);
map2.put(arr2[i],pattern.charAt(i));
}
return true;
}
}
标签:target,nums,int,pattern,arr2,哈希,两数
From: https://blog.csdn.net/m0_74386799/article/details/143308708