力扣刷题day1(java自用)
1 两数和
找出两数等于目标值的下标;
方法一:
时间复杂度0(N^2)
暴力破解
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] a= 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)
{
a[0]=i;
a[1]=j;
return a;
}
}}
return a;
}
}
方法二:
java创建数组语法 int[] a =new int[]{?,?}
使用哈希表实现,时间复杂度为O(N),创建哈希表查找时间紧为0(1)
介绍一下map
简单介绍一下:如果直接暴力破解显然很慢,如果使用map,可以通过查询map中是否有对应的(target-x),有一些两种情况。
map中没有
1 可能为第一个值,直接放入mqp中
2 可能没有对应的j使相加为target,则放入map中
map中有
1 直接返回key对应value,i。
Map<Integer, Integer> map = new HashMap<>(); //创建map表
map.containsKey("") 有则表示true,无则表示false
map.put(" "," ")放入值
map.get(" ") 通过键获得值
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
int n = nums.length;
for (int i = 0; i < n; i++) {
if (map.containsKey(target - nums[i])) {
return new int[] { i, map.get(target - nums[i]) };
}
map.put(nums[i], i);
}
return new int[] {};
}
}