大家好,我是听雨,是一名跨考计算机专业的研一学生。为提高编程的水平,计划每天刷编程题目。由于我是算法小白,所以开始只能从简单题开始写贴,请大家多多包涵,希望和大家一起进步
题目
今天的第二题为 力扣1. 两数之和
解题思路
这是力扣中的第一题,比较基础。相信没写过算法的小伙伴也可以通过枚举求出结果,只需要两层for循环即可啦,但这样写要的时间复杂度是 O ( n 2 ) O(n^2) O(n2),能否再快一点呢? 答案是肯定的,在数据结构中HashMap查找元素的时间为 O ( 1 ) O(1) O(1) ,原理点这里。利用这一点我们只要遍历一次数组便可以得到结果。将HashMap的键值对设置为 [nums[i],i],对于当前元素在哈希表中查找是否有 target - nums[i] 的键,如果存在,说明找到了结果,返回即可。如果不存在,则将该值加入哈希表。
代码如下:
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map = new HashMap();
int[] res = new int[2];
for(int i = 0 ; i < nums.length; i ++){
if(map.containsKey(target - nums[i])){
res[0] = map.get(target - nums[i]);
res[1] = i;
return res;
}
map.put(nums[i],i);
}
//为了程序可以执行,实际上这行代码不会执行
return res;
}
这样跑出来的结果为: