引言
由 “LSGO软件技术团队” 组织的 “基础算法刻意练习” 采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三十天的时间完成这组刻意练习。以下是我的每日打卡记录:
Task01.两数之和
-
Leecode第1题
-
难度:简单
-
题目概述:
给定一个整数数组 nums 和一个目标值 target, 请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。 但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
题解思路
直接从前往后利用两层for循环遍历数组,直到找到符合 target 一对数返回,否则返回 null ,查找结束。
class Solution {
public int[] twoSum(int[] nums, int target) {
int n=nums.length;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(nums[i]+nums[j]==target)
return new int[]{i,j};
return null;
}
}
提交记录
2.散列表HashMap
从前往后遍历数组,对于确定的 nums[i],通过 HashMap 查找 target-nums[i] 是否存在,若存在,则 return;若不存在,则将 target-nums[i] 存入HashMap,直到遍历结束
import java.util.HashMap;
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> hm=new HashMap<>();
hm.put(target-nums[0],0);
for(int i=1;i<nums.length;i++){
if(hm.containsKey(nums[i]))
return new int[]{hm.get(nums[i]),i};
else
//记录的是nums[i]对应的目标和下标
hm.put(target-nums[i],i);
}
return null;
}
}