Leetcode·两数之和
普通双层 for 循环解法
时间复杂度:O(N 2 )
空间复杂度:O(1)
耗时:70ms
class Solution {
//每一个都跟它后面的数组合,是否等于target
public int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
result[0] = i;
result[1] = j;
}
}
}
return result;
}
}
哈希解法(推荐)
时间复杂度:O(N)
空间复杂度:O(N)
耗时:2ms
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0;i<nums.length;i++){
//求出另一个值的大小
int get = target - nums[i];
//如果map中包含这个值:get
if (map.containsKey(get)){
//则直接返回两个下标
return new int[]{map.get(get),i};
}
//否则key-value加入到map中
map.put(nums[i],i);
}
return null;
}
}
一文一哲理
用眼看世界,难免一叶障眼