目录
不定期的会更新 HOT100,一起努力!!!
1.两数之和
时间复杂度O(N):遍历两遍数组的时间
空间复杂度O(1)
1.1暴力求解
class Solution {
public int[] twoSum(int[] nums, int target) {
int len = nums.length;
//用两个循环来遍历这个数组,寻找下标相加等于target
//注意数组中同一个元素不能重复出现
for(int i = 0;i<len;i++){
for(int j = i+1 ;j<len;j++){
if(nums[i] + nums[j] == target){
return new int[]{i,j};
}
}
}
//肯定不会执行到这一行,所以随便return一个数组就可以
return new int[0];
}
}
1.2哈希表
建立一个哈希表,key存放数组的元素,value存放数组的下标
时间复杂度O(N):遍历数组的时间
空间复杂度O(N):哈希表的空间
1.根据题目的提示可以知道,nums.length>2,所以将第一个数组与其对应的下标放入我们设置好的哈希表中
2.应为表中一定是存在两数之和等于 target 的,所以将 target-nums[i],如果 target-nums[i] 与哈希表中已有的元素相同,则说明已找到两个元素,返回数组的下标
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> hash = new HashMap<>();
int len = nums.length;
hash.put(nums[0],0);
for(int i = 1;i<len;i++){
if(hash.containsKey(target - nums[i])){
//如果相等就说明找到了
return new int[]{hash.get(target - nums[i]),i};
}
hash.put(nums[i],i);
}
return new int[1];
}
}