临窗旋墨的博客       临窗旋墨的导航

【临窗旋墨-leetcode】0001-两数之和-[简单]

【临窗旋墨-leetcode】0001-两数之和-[简单]

标签:hash

0001-两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

题解:

1 暴力循环

没有什么是暴力循环不能解决的,如果有就多循环几次。

这一题确实简单,没什么好说的,代码如下,简单明了。

public static int[] twoSum(int[] nums, int target) {
	for (int i = 0; i < nums.length; i++) {
		for (int j = 0; j < nums.length; j++) {
			if (i != j && nums[i] + nums[j] == target) {
				return new int[]{i, j};
			}
		}
	}
	return null;
}
执行结果:

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:38.5 MB, 在所有 Java 提交中击败了80.76%的用户

02利用HashMap

暴力循环确实有点暴力了,是不是可以考虑使尽量减少循环次数,比如在遍历的时候同时把数据记录到Map,同时只要在Map里找到那个和当前数和等于target的数字(target-cur)呢?

//利用map
public static int[] twoSum(int[] nums, int target) {
	// 数字--> 索引
	Map<Integer, Integer> map = new HashMap<>();
	for (int i = 0; i < nums.length; i++) {
		if (map.containsKey(target - nums[i])) {
			return new int[]{map.get(target - nums[i]), i};
		}
		map.put(nums[i], i);
	}
	return null;
}
执行结果

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:38.5 MB, 在所有 Java 提交中击败了82.93%的用户

这一题比较简单,没什么可多说的,从2020年10月底,到现在12月底,刚好快两个月了,陆续已经刷了60多道题目。从刚开始的完完全全的小白,到现在对于一些常见的题目已经可以比较顺畅的写出来了,故开始把力扣上的题目按序记录下来,聊以自勉,望为时未晚。

Git地址:https://gitee.com/lcxm/basics/tree/master/docs/leetcode

文章来源:临窗旋墨的博客,转载望注明出处。

2020年12月25日

posted @ 2020-12-25 15:07  临窗旋墨  阅读(71)  评论(0编辑  收藏  举报